Rails:为什么不使用默认的应用程序布局?

时间:2010-12-16 02:06:09

标签: ruby-on-rails layout ruby-on-rails-3

我向我的控制器添加了@sort_by属性,并将其值初始化为:

class ProductsController < ApplicationController
  def initialize
    @sort_by = :shop_brand
  end
  ...
end

这导致不使用默认的应用程序布局。

为什么?

将属性添加到控制器并初始化它的正确方法是什么?

1 个答案:

答案 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值。这很难实现,因为您需要确保每个链接或表单将值复制到下一个请求。然而,这样做的好处是用户可以打开具有不同排序的多个标签,并且任何加书签的链接将在下次恢复相同的排序。这就是搜索引擎会使用的方法。