2

ApplicationController が before_filter で行うのと同じように、それを拡張するクラスがコールバックに登録できるようにする基本クラスを Ruby で作成したいと考えています。

class AController < ApplicationController
  before_filter :foo

  def foo

  end
end

その before_filter の向こう側のようなものを自分で書きたいと思っています。

class AClass < MyBase
  register_callback :callback1

  def callback1
    puts "called!"
  end

  def test
    call_me_maybe 5
  end
end

call_me_maybeメソッドはクラスで定義され、以前MyBaseに登録されたコールバックを呼び出す場合があります。MyBase の実装はどのようなものですか。

4

2 に答える 2

1

ActiveSupportモジュールを提供しCallbacksます:

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/callbacks.rb

基本クラスは、次の例のようになりますactive_support/callbacks.rb

class Record
  include ActiveSupport::Callbacks
  define_callbacks :save

  def save
    run_callbacks :save do
      puts "- save"
    end
  end
end

callbacks.rb完全な例については、を参照してください。

于 2012-09-01T01:48:00.387 に答える
0

私はそれを行う方法を考え出したsend

class MyBase
  def self.register_callback name
    @@callback_name = name
  end

  def call_me_maybe num
    if num > 0
      self.send @@callback_name
    end
  end
end

send の使用が何らかの理由で悪いかどうかはわかりません...別の方法があるはずです...

于 2012-09-01T02:45:37.890 に答える