rails form_tag url path

8

这似乎应该很简单,但它一直在引起我的问题。

我有一个select_tag,从模型中获取数据。我想让人们从下拉列表中选择自己的位置,按提交按钮后跳转到那个位置的页面。

这是我的代码:

<% form_tag installation_path do %>
<%= select_tag :id, options_from_collection_for_select(Installation.find(:all), :id, :name) %>
<div id="button">
  <p>
    <%= submit_tag "Go", :name => nil %>
  </p>
</div>

问题在于它需要一个“:id”,但它不会从下面的下拉菜单中获取“:id”。
我做错了什么,你有其他关于“正确”方法的建议吗?
谢谢
1个回答

8

看起来你需要获取参数,而不是提交参数。

form_tag installation_path, :method => :get do

首先感谢!使用错误的方法确实是一个问题。但是为了使路由正确,需要使用installation_path(id)。然而,提取的id是来自collection_select数组的id。有什么想法吗?这似乎不应该是如此困难的简单任务。 - looloobs
3
问题在于,您想提交表单并转到“/installations/:id”。但实际上,您最终会进入“/installations?id=:id”。因此,您可以为Rails提供一个路由match '/installations',:to => 'installations#show'。该路由的问题在于,它与索引冲突。因此,您应该有一个特殊的路由:match '/goto_installation' => 'installations#show', :as => 'goto_installation'。然后在您的表单中:form_tag goto_installation_path,:method => :get do。在控制器的before过滤器中,您可以redirect_to installation_path(:id => params[:id])以获得所需的URL。 - Max Chernyak
嗨,我又回来了。结果发现我不能使用“match”,因为我还没有运行rails3。有什么其他的想法吗?我就是不明白为什么这么复杂。这似乎是经常做的事情,但我似乎找不到任何指导。提前感谢您的帮助,我很感激。 - looloobs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接