Я пытаюсь создать простую форму поиска в Rails, но мне кажется, что я что-то упустил.
У меня есть названный маршрут для поиска:
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 не удалось сгенерировать из {: action => "search",: controller => "home"} - у вас могут быть неоднозначные маршруты, или вам может потребоваться указать дополнительные параметры для этого маршрута. У content_url есть следующие обязательные параметры: [: first_name,: last_name] - все ли они удовлетворены?
Что мне не хватает? Я думал, что поля, определенные в моей форме, будут автоматически связаны с параметрами моего маршрута. : - /
Обновление:
Я понимаю, что 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 из именованного маршрута name в результате поиска. Спасибо, ребята!