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