我编写了以下代码来创建一个用户界面,可以在查询字符串中添加和删除过滤器:
<% @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
每个过滤器链接应继续保留查询字符串中存在的其他参数。
答案 0 :(得分:1)
我会制作一个帮助方法,也许是“get_colour_link”,并传递你的颜色和参数。