如何使选择下拉框的行为类似于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
提前致谢
答案 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中定义重定向(没有控制器中的附加操作),但是没有运气。
这可能对您有用,但我也很想看到其他(更好)的解决方案。