2010-12-13 62 views
1

嗨 我已经问过类似这个问题,但从来没有解决。所以我再次尝试。Select_tag提交需要重定向到显示页面:id?

这看起来应该是如此简单。我没有使用Rails 3,但顺便说一下。

我想要做的是有一个下拉菜单,当一个人选择该位置并按下“去”他们去那个页面。

<% 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 %> 

这就成了问题:http://localhost:3000/installations/id?id=1&commit=Create。它找不到:id。我只是不知道如何正确的路由。这似乎不应该那么困难。

任何帮助将是伟大的。谢谢。

+0

是什么在你的路线?安装/ ID?绝对不对。如果你使用正常的Rails路由,那么你的show动作应该是安装/:id – Samo 2010-12-13 17:13:32

+0

我只有宁静的路线map.resources:安装,好像我需要在路线中做些什么,我只是无法弄清楚它是什么。我相信它会自动使用路由安装/ ID?因为我需要使用:get方法。谢谢 – looloobs 2010-12-13 18:17:33

回答

0

我认为你的form_tag可能有问题。看来你正在两次定义路径。

两个

installation_path([:id]) 

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

被用来生成路径,但你应该使用这两种我不认为。只是

installation_path([:id]) 

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

您需要创建和使用不基于安装ID(并且不使用Rails资源路线碰撞)的新“秀”的路线走,并继续将安装ID作为params对象的一部分发送到控制器的show action中。

在routes.rb中,

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

在您看来,

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