Я пытаюсь создать простую форму поиска в Rails, но я думаю, что чего-то не хватает.Использование именованных маршрутов с параметрами и form_tag
У меня есть именованный маршрут для поиска:
map.search ":first_name/:last_name", :controller => "home", :action => "search"
Я пытаюсь использовать это в моей форме поиска:
<% form_tag(search_path, :method => 'get') do %>
<%= text_field_tag(:first_name) %>
<%= text_field_tag(:last_name) %>
<%= submit_tag("Search") %>
<% end %>
Но когда я загрузить форму поиска я получаю ActionController :: RoutingError:
search_url failed to generate from {:action=>"search", :controller=>"home"} - you may have ambiguous routes, or you may need to supply additional parameters for this route. content_url has the following required parameters: [:first_name, :last_name] - are they all satisfied?
Что мне не хватает? Я думал, что поля, определенные в моей форме, будут автоматически связаны с параметрами моего маршрута. : -/
Update:
Я понимаю, что search_path генерируется до того, как форма отображается в настоящее время, поэтому он не может быть обновлен. Очевидный взгляд!
Я изменил свои маршруты:
map.search 'search', :controller => "home", :action => "search"
map.name ':first_name/:last_name', :controller => "home", :action => "name"
А теперь search
действие просто делает:
def search
redirect_to name_path(params)
end
Это все работает удовольствие! Основная цель здесь заключалась в получении этого URL-адреса от имени названного маршрута в результате выполнения поиска. Спасибо, парни!
Я только что заработал с вашим вариантом №2 - я создал еще один маршрут и другое действие. Благодаря! –
Возможно, было бы лучше сделать это в обоих направлениях. Так что сделайте это 2. способ по умолчанию, и если js работает, измените 'action' на js - чтобы он мог работать без перенаправления. – klew