J'essaie de créer un formulaire de recherche simple dans Rails, mais je pense qu'il me manque quelque chose.Utilisation d'itinéraires nommés avec paramètres et form_tag
J'ai une route nommée pour la recherche:
map.search ":first_name/:last_name", :controller => "home", :action => "search"
Je suis en train de l'utiliser dans mon formulaire de recherche:
<% form_tag(search_path, :method => 'get') do %>
<%= text_field_tag(:first_name) %>
<%= text_field_tag(:last_name) %>
<%= submit_tag("Search") %>
<% end %>
Mais quand je charge le formulaire de recherche-je obtenir un 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?
Que manque-t-il? Je pensais que les champs définis dans mon formulaire seraient automatiquement liés à mes paramètres d'itinéraire. : -/
Mise à jour:
Je comprends que search_path est généré avant que le formulaire est affiché maintenant, il ne peut pas être mis à jour. Évident avec le recul!
j'ai changé mes itinéraires:
map.search 'search', :controller => "home", :action => "search"
map.name ':first_name/:last_name', :controller => "home", :action => "name"
Et maintenant l'action search
fait exactement:
def search
redirect_to name_path(params)
end
Tout fonctionne un régal! L'objectif principal ici était d'obtenir cette URL à partir du nom itinéraire nommé à la suite d'une recherche. Merci les gars!
Je viens de le faire travailler avec votre option # 2 - J'ai créé un autre itinéraire et une autre action. Merci! –
Probablement, il serait préférable de le faire dans les deux sens. Donc, faites-le en 2. mode par défaut et si js fonctionne, alors changez 'action' avec js - donc ça peut marcher sans rediriger. – klew