我有一个带有索引视图和显示视图的应用程序,没什么特别的。索引视图具有筛选选项。我想要的是用户选择的过滤器选项以某种方式存储,因此当用户打开详细信息屏幕并稍后返回时,将显示相同的过滤记录。
后退按钮不是一个选项,因为除了打开详细信息屏幕并返回之外,还可以做更多的事情。我可以在之后的每个请求中添加过滤器参数,直到返回到索引页面,但这似乎有点麻烦。我有什么选择?
答案 0 :(得分:1)
我通过创建一个名为manage_filter_state
的私有方法在控制器中解决了这个问题。在根据过滤器参数的值检索所有记录之前,在索引操作中调用此方法。方法看起来像这样:
private
def manage_filter_state
if params[:company]
cookies[:company] = { value: params[:company], expires: 1.day.from_now }
else
if cookies[:company]
params[:company] = cookies[:company]
end
end
end
基本上,如果设置了param值,它会设置一个用于保持状态的cookie。稍后再次使用该参数的另一个值访问该页面时,它会覆盖该cookie。稍后访问时没有参数值,它会使用cookie值设置参数。
答案 1 :(得分:0)
通常不需要使用cookie。将其存储在会话[:name]
中控制器内部有一个好地方。要概括问题,您可以在会话变量中存储任何QUERY,并在接收链接时附加。
离开控制器时重置。