首先,为每个可能想要访问搜索参数的操作创建一个过滤器:
ProjectsController < ApplicationController
before_filter :save_searches
def save_searches
@addons = ''
[:page, :id_equals,:title_contains,:stage_in].each do |k|
if params[k]
pval = params[k].is_a?(Array) ? params[k].join(',') : params[k]
@addons << k.to_s + "=" + pval + "&"
end
end
@addons.chop!
end
现在,当你的动作触发时,@addons 将被设置,然后你可以这样做:
<%= link_to 'Edit' , edit_path(@project.id) + @addons.length > 0 ? "?" + @addons : '' %>
就是说,我敢打赌这在某种程度上是一种黑客行为,并且有一种更清洁的方法可以做到这一点。但这对我有用。
:page 键使得如果您运行分页并使用 :page 参数跟踪当前页面,您的分页也应该被记住。
另请注意,如果您在参数中获得一个数组(即使用 :multiple=>true 进行选择的结果),则会处理此问题。