отправка формы рельсов на "дружественный" URL - PullRequest
8 голосов
/ 16 декабря 2011

У меня есть форма поиска на моем сайте, которая позволяет пользователю выполнять поиск по многим различным аспектам, таким как город, диапазон цен, размер и т. Д.

форма отправляется в виде GET, поэтому параметры формы находятся вURL.

они оказываются довольно уродливыми:

/ search? utf8 = ✓ & city_region = vancouver & property_type_id = 1 & min_square_footage = 0 & max_square_footage = 15000

(на самом деле они еще хужепотому что параметры поиска являются частью модели, поэтому в URL также есть много закодированных [и] ссылок

я хотел бы вместо этого создать форму для генерации URL, например:

/ search / vancouver / office? Square_footage = 0-15000

, где некоторые параметры помещаются в сам путь URL, а другие остаются в параметрах запроса (в несколько более удобочитаемой форме).формат).

Каков наилучший способ справиться с этим в приложении рельсов?все, что я могу придумать, это использовать код javascript в форме отправки для управления URL-адресом, которому отправляет форма.

Ответы [ 3 ]

6 голосов
/ 29 ноября 2012

Вы можете добавить в свой контроллер это условие:

if params[:utf8]
  redirect_to "/searches/#{params[:city_region]}/..."
end
1 голос
/ 30 апреля 2012

TLDR: единственный способ сделать это - использовать ajax в форме, а затем перенаправить.

Установите событие click на кнопке поиска, чтобы вызвать публикацию формы ajax в методе контроллера.

Затем используйте магию в ответе Джека и вызовите редирект, используя ваш дружественный URL-адрес, который вы генерируете ... Просто помните, что если вы хотите, чтобы Google нашел ваш дружественный URL-адрес, вам нужно, чтобы они статически размещались на странице где-то. Если вы не заботитесь о SEO, тогда ваше решение должно быть довольно простым.

1 голос
/ 16 декабря 2011

Все, что вам нужно, это создать маршрутизацию для страниц такого типа.

Если вы на Rails 3:

match '/search(/:city(/:property_type(/:min_square_footage(/:max_square_footage)))' => 'search#index', :as => :search

(эти скобки относятся к некоторым переменным, являющимся необязательными)

Тогда вы можете назвать это, по вашему мнению, что-то вроде:

= link_to 'Search', search_url(:city_region => 'Vancouver', :property_type_id => 5, :min_square_footage => 0, :max_square_footage => 15000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...