2010-12-13 28 views
1

Salut J'ai déjà posé une question similaire à celle-ci mais je n'ai jamais trouvé de solution. Donc j'essaye encore.Select_tag soumis doit rediriger pour afficher la page avec: id?

Cela semble être si simple. Je n'utilise pas Rails 3 encore BTW. Tout ce que je veux faire est d'avoir un menu déroulant et quand une personne choisit cet endroit et appuie sur "aller", ils vont à cette page.

<% form_tag installation_path([:id]), :url => { :action => "show" }, :method => :get do %> 
<%= select_tag :id, options_from_collection_for_select(Installation.find(:all), :id, :name) %> 
<%= submit_tag 'Go' %> 
<% end %> 

Cela devient le problème: http://localhost:3000/installations/id?id=1&commit=Create. Il ne peut pas trouver le: id. Je ne sais juste pas comment l'acheminer correctement. Il semble que cela ne devrait pas être si difficile.

Toute aide serait géniale. Merci.

+0

Que dans vos itinéraires? installations/id? n'est certainement pas juste. Si vous faites un routage Rails normal alors votre action de show devrait être installations /: id – Samo

+0

J'ai juste des routes reposantes map.resources: installations, il semble que j'ai besoin de faire quelque chose dans les routes que je ne peux pas comprendre ce que c'est. Je crois qu'il utilise automatiquement la route installations/id? parce que j'ai besoin d'utiliser la méthode: get. Merci – looloobs

Répondre

0

Je pense qu'il pourrait y avoir un problème avec votre form_tag. Il semble que vous définissiez le chemin deux fois.

deux

installation_path([:id]) 

et

:url => { :action => "show" } 

sont utilisés pour générer le chemin mais je ne pense pas que vous devriez utiliser les deux. Il suffit d'aller avec

installation_path([:id]) 

ou

:url => { :controller => "installations", :action => "show", :id => id } 
0

Vous devez créer et utiliser un nouveau « show » itinéraire qui ne repose pas sur l'ID d'installation (et ne pas entrer en collision avec Rails routes de ressources), et continuez à envoyer l'ID d'installation dans l'action show du contrôleur dans le cadre de l'objet params.

En routes.rb,

get 'show_installation', to: 'installations#show' 

À votre avis,

<% form_tag show_installation_path, :method => :get %> 
...