rails 3选择下拉框

时间:2011-08-02 06:58:56

标签: ruby-on-rails ruby-on-rails-3 forms drop-down-menu

如何使选择下拉框的行为类似于rails中的链接。我的意思是,当有人从列表中选择一个选项时,它会在URL中发布它。例如,如果有人从框中选择了他们的名字是“Thomas”,则在URL中会显示?name=Thomas。我怎么能这样做?

  <%= form_tag(orders_path, :method => "get") do %> 
    Choose a state
    <%= hidden_field_tag :id, "1" %>
    <%= select_tag :state, options_for_select(us_states) %>
    <%= submit_tag "Go" %>
  <% end %>

但是当我这样做时,我在网址中获得了一堆额外的信息,例如: ?utf8=✓&id=1&name=Thomas&commit=Go

提前致谢

2 个答案:

答案 0 :(得分:3)

发送所有其他字段的原因是因为rails默认将它们添加到其所有帮助程序中。 commit=Go部分来自submit_tag助手,utf8=✓就在那里,因为它是由form_tag助手添加的。实现所需要的最简单方法是不使用其他表单助手:

<form action="<%= orders_path %>" method="get">
  <%= select_tag :name, options_for_select(%w(John Jim Thomas)) %>

  <input type="submit" value="Go">
</form>

选择“托马斯”并点击“开始”,您只会在网址中获得?name=Thomas。但是,只要将其名称设置为nil

,就可以使用提交帮助程序
<form action="<%= orders_path %>" method="get">
  <%= select_tag :name, options_for_select(%w(John Jim Jones)) %>

  <%= submit_tag "Go", :name => nil %>
</form>

答案 1 :(得分:0)

好问题,最近我自己打了个嗝。我最终在我的控制器中定义了一个新动作,它接收响应并通过redirect_to简单地重定向到最终URL。我也尝试直接在routes.rb中定义重定向(没有控制器中的附加操作),但是没有运气。

这可能对您有用,但我也很想看到其他(更好)的解决方案。