1

我正在编写一个搜索表单,它将重新加载将搜索参数添加到 URL 的页面。

目前,我的表单生成的 URL 包含所有表单字段,包括空字段。这会使使用通常不需要的数据生成的 url 变得很混乱。

我希望我的表单重定向到仅包含包含数据的字段的 url。

我的表格有代码:

= form_tag orders_path, method: :get do
    = text_field_tag :search, params[:search], class: "span2 appendedInputButtons"
    = select_tag "order_types", 
      options_from_collection_for_select(OrderType.all, :id, :name),
      multiple: true, 
      size: 8, 
      include_blank: "select"
    %button.btn.btn-primary Update list

当我在没有填写任何表单的情况下点击提交按钮时,我会被重定向到这样的 url:

http://localhost:3000/orders?utf8=%E2%9C%93&search=&order_types%5B%5D=

虽然我希望网址是这样的:

http://localhost:3000/orders

如果我只选择一些order_types我得到:

http://localhost:3000/orders?utf8=%E2%9C%93&search=&order_types%5B%5D=3&order_types%5B%5D=6

虽然我希望它是这样的:

http://localhost:3000/orders?order_types%5B%5D=3&order_types%5B%5D=6

甚至更好:

http://localhost:3000/orders?order_types=3,6

或类似的东西,但更简洁,

非常感谢您的帮助,

4

1 回答 1

2

form_for将表单绑定到一个对象,rails internals 将使用前缀命名与该对象(或多个对象)相关的字段,因此当提交表单时,数据将在 params 中显示为params[:prefix][:some_data].

为了减少查询字符串的大小,我建议您手动使用form_tag构建表单。通过这种方式,您可以完全控制提交的字段,还可以避免utf8=%E2%9C%93utf8 强制雪人黑客攻击。

于 2013-10-27T14:43:29.167 回答