【问题标题】:rails 3 select drop down boxrails 3 选择下拉框
【发布时间】:2011-08-02 06:58:56
【问题描述】:

如何使选择下拉框的行为类似于 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 %>

但是当我这样做时,我会在 url 中得到一堆额外的信息,例如: ?utf8=✓&amp;id=1&amp;name=Thomas&amp;commit=Go

提前致谢

【问题讨论】:

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


    【解决方案1】:

    发送所有其他字段的原因是 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>
    

    通过选择“Thomas”并点击“Go”,您的网址中只会出现?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>
    

    【讨论】:

    • 这样一个简单的解决方案......与我在这里看到的解决方案相比,唯一的缺点是它不支持“漂亮”的网址,以防你想要 /users/thomas/.. . 而不是 users?name=thomas... 没有 url 重写。 +1 以简化您的解决方案
    【解决方案2】:

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

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

    【讨论】:

    • 顺便说一句。我可能是您代码中添加一些 javascript 的一个很酷的补充,例如在您的选择框的 onchange 事件中,它只是执行“submit()” - 这会使“Go”按钮过时(如果您希望您的用户启用 js,那就是......)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多