我向我的控制器添加了@sort_by
属性,并将其值初始化为:
class ProductsController < ApplicationController
def initialize
@sort_by = :shop_brand
end
...
end
这导致不使用默认的应用程序布局。
为什么?
将属性添加到控制器并初始化它的正确方法是什么?
答案 0 :(得分:6)
覆盖构造函数可能是个坏主意(正如您所发现的那样)。您应该使用before_filter
:
class ProductsController < ApplicationController
before_filter :set_defaults
...
private
def set_defaults
@sort_by = :shop_brand
end
end
然而,听起来你想保持状态。最简单的方法是存储在用户的会话中,该会话将自动保留每个用户,直到他们关闭浏览器:
def set_defaults
session[:sort_by] ||= :shop_brand
end
另一个选项是传递URL中的当前sort_by值。这很难实现,因为您需要确保每个链接或表单将值复制到下一个请求。然而,这样做的好处是用户可以打开具有不同排序的多个标签,并且任何加书签的链接将在下次恢复相同的排序。这就是搜索引擎会使用的方法。