Ruby on Rails before_filter vs ruby​​的初始化

Cur*_*ind 13 ruby ruby-on-rails

只是想到了我的想法.以下是有什么区别的

的before_filter

class ApplicationController < ActionController::Base
  before_filter :foo
  def foo
    @mode = Model.new
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby初始化

class ApplicationController < ActionController::Base
  def initialize
    foo
  end

  def foo
    @mode = Model.new
  end
end
Run Code Online (Sandbox Code Playgroud)
  1. ruby的初始化方法是否在rails中按预期工作?
  2. 如果是,那么我们是否可以使用初始化过滤器必须应用于控制器中的所有操作?

Tha*_*you 24

对于每个请求,你确实得到了一个新的实例ApplicationController,但是这里的重要禁忌是你试图在ActionController::Base#initialize不调用父行为的情况下覆盖核心行为.

ApplicationController < ActionController::Base

  def initialize
    super # this calls ActionController::Base initialize
    init_foo
  end

  private

  def init_foo
    @foo = Foo.new
  end
end
Run Code Online (Sandbox Code Playgroud)

这不是惯用的Rails行为.他们给你before_filter一个理由; 所以使用它.