как уменьшить длинный URL поиска в rails 3.2

У меня есть этот URL-адрес контроллера поиска:

http://localhost:3000/search/index?utf8=✓&search=Search_terms

как можно обрезать это до:

http://localhost:3000/search=query

код поиска:

#search-box
  #search-form
    = form_tag search_index_path, :method => 'get'  do
      = text_field_tag :search, params[:search], :autocomplete => "off"
      %button#search-button{:type => "submit"}
        %span Go!

Или это возможно??

Пожалуйста, порекомендуйте.


person The questioner    schedule 09.07.2012    source источник
comment
Пожалуйста, посетите stackoverflow.com/questions/11391686 /   -  person Soundar Rathinasamy    schedule 09.07.2012


Ответы (3)


Это невозможно для самого Ruby (или Rails). Тебе следует

  1. добавить обратный вызов JavaScript к событию отправки формы
  2. проверить форму
  3. замените целевой URL-адрес формы на тот, который состоит из search= + входное значение.

Имейте в виду, что не все символы могут быть частью URL. По этой причине вы должны передавать поисковый запрос как параметр, а не как часть URI.

person Simone Carletti    schedule 09.07.2012
comment
Да, это сложно. Я просто оставляю это без изменений. - person The questioner; 09.07.2012

Если вы не хотите показывать params[search] в URL-адресе, вы должны изменить метод с GET на POST в своей форме.

Прочтите: http://www.cs.tut.fi/~jkorpela/forms/methods.html

или укажите код формы в вопросе...

person gabrielhilal    schedule 09.07.2012
comment
Я хочу показать params[search] , но не хочу search/index?utf8=✓& - person The questioner; 09.07.2012
comment
Если вы измените метод на post, в URL-адресе не будет отображаться дополнительный аргумент, и вы можете использовать параметр [search] в своем контроллере. - person gabrielhilal; 09.07.2012
comment
Какое действие лучше?? ПОСТАВИТЬ или ПОЛУЧИТЬ? с точки зрения стабильности, безопасности и нагрузки на сервер. - person The questioner; 09.07.2012
comment
ваш ответ здесь: stackoverflow.com/questions/195212/ - person gabrielhilal; 09.07.2012

Это вполне возможно с помощью (просто) Rails.

Убедитесь, что страница, на которую вы отправляете, является корневым путем

(в config/routes.rb)

root :to => "search#index"

Затем просто убедитесь, что ваша форма публикуется на root_path

Избавиться от «снеговика» немного сложнее. Если вы уверены, что никто не отправит символы, отличные от UTF8, тогда избегайте помощника form_tag и ручного кодирования вашей формы (легко с такой короткой формой), чтобы избавиться от него.

person mylescarrick    schedule 09.07.2012
comment
Согласно исходному примеру, пользователю нужен запрос в URL-адресе (а не в качестве параметра). Это не возможно с (просто) Rails. - person Simone Carletti; 09.07.2012
comment
Это не будет именованным параметром. Он просто будет отправлен как ключ = значение со всеми параметрами, запрошенными на этой странице, поэтому root_path не имеет дополнительных параметров named (поскольку это метод индекса на контроллере RESTful) - person mylescarrick; 09.07.2012