Rails:通过添加/删除查询字符串参数进行过滤

时间:2011-02-08 20:17:51

标签: ruby-on-rails ruby-on-rails-3

我编写了以下代码来创建一个用户界面,可以在查询字符串中添加和删除过滤器:

<% @colours.each do |colour| %>
  <% if params[:colour].include?(colour) %>
    <% # Already being filtered. Show remove link. %>
    <% modified_params = params.dup %>
    <% modified_params[:colour].delete_if {|v| v == colour } %>
    <%= link_to "Remove #{colour}", modified_params %>
  <% else %>
    <% # Not being filtered. Show add link. %>
    <%= link_to "Add #{colour}", params.merge('colour[]' => colour) %>
  <% end %>
<% end %>

单击“添加”链接会将过滤器添加到查询字符串中;单击“删除”链接可从查询字符串中查找并删除过滤器。

这很好用,但对我来说看起来都很混乱。我正在寻找改进此代码的建议。也许有更好的方法来实现这一点,或者也许是我忽略的宝石。

任何反馈都非常受欢迎,因为我对Ruby和Rails都相对较新。

非常感谢。

更新

为了澄清,示例查询字符串可能如下:
?colour[]=Red&colour[]=Green&colour[]=Blue&size[]=Very+small&size[]=Small

每个过滤器链接应继续保留查询字符串中存在的其他参数。

1 个答案:

答案 0 :(得分:1)

我会制作一个帮助方法,也许是“get_colour_link”,并传递你的颜色和参数。