14

心の中のただの考え。次の違いは何ですか

before_filter

class ApplicationController < ActionController::Base
  before_filter :foo
  def foo
    @mode = Model.new
  end
end

ルビーの初期化

class ApplicationController < ActionController::Base
  def initialize
    foo
  end

  def foo
    @mode = Model.new
  end
end
  1. Ruby の initialize メソッドは Rails で期待どおりに動作しますか?
  2. はいの場合、コントローラー内のすべてのアクションにフィルターを適用する必要がある代わりに、初期化を使用できますか?
4

2 に答える 2

25

リクエストごとに、 の新しいインスタンスを取得しますが、親の動作を呼び出さずに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

ただし、これは典型的な Rails の動作ではありません。彼らはあなたbefore_filterに理由を与えます。だから使う。

于 2013-09-02T15:13:51.880 に答える