Railsモデルクラスでコールバックを呼び出すことができるのはなぜですか?

ruby ruby-on-rails ruby-on-rails-3
Railsモデルクラスでコールバックを呼び出すことができるのはなぜですか?

次のようなRailsモデルクラスがあります。

class Something < ActiveRecord::Base

  before_create do
     self.key = SecureRandom.urlsafe_base64(8)
  end

end
ここで「before_create」を呼び出すことができるのはなぜですか? 私はそれが `ActiveRecord

Base`のメソッドであると思っていましたが、そうではありません。 コールバックは `ActiveRecord :: Callbacks`のメソッドです。 しかし、何も含めずにモデルクラスで呼び出すことができるのはなぜですか?

  2  0


ベストアンサー

これは、 `ActiveRecord

Base`がこれを行う(またはRailsのバージョンに応じて同様のことを行う)ために実行できます。

Base.class_eval do
  #...
  include Callbacks, ActiveModel::Observing, Timestamp
  #...
end
したがって、 `ActiveRecord

Base`にはすでに` ActiveRecord :: Callbacks`が含まれており、クラスは `ActiveRecord :: Base`を継承してコールバックを取得します。

3


2


コールバックはActiveRecord内のモジュールであり、そのモジュールは、「何か」が拡張するBaseに「ミックスイン」されます。 モジュール/ミックスインは、一部の静的言語のインターフェイスのようなものですが、実装するためのコントラクトではなく、メソッドの実装も含まれます。

1


タイトルとURLをコピーしました