コールバック
Mongoid は、 ActiveRecord コールバック の多くを実装します 。
ドキュメント コールバック
Mongoid は、 ドキュメントに対して次のコールバックをサポートしています。
after_initialize
after_build
before_validation
after_validation
before_create
around_create
after_create
after_find
before_update
around_update
after_update
before_upsert
around_upsert
after_upsert
before_save
around_save
after_save
before_destroy
around_destroy
after_destroy
コールバックは、別のドキュメントに埋め込まれているかどうかに関係なく、任意のドキュメントで使用できます。 効率的にするために、Mongoid は永続性アクションが実行されたドキュメントに対してのみコールバックを呼び出すことに注意してください。 これにより、Mongoid は大規模な階層をサポートし、最適化されたアトミックな更新を効率的に処理できるようになります(ドキュメント階層全体でコールバックを呼び出すことなく)。
ドメイン ロジックにコールバックを使用することは設計方法としてとしては誤りであり、チェーン内のコールバックが実行を停止するとデバッグが困難になる、予期しないエラーが発生する可能性があることに注意してください。 バックグラウンド ジョブをキューアップするなど、横断的な問題にのみ使用することをお勧めします。
class Article include Mongoid::Document field :name, type: String field :body, type: String field :slug, type: String before_create :send_message after_save do |document| # Handle callback here. end protected def send_message # Message sending code here. end end
コールバックはアクティブ サポートから取得されているため、新しい構文も使用できます。
class Article include Mongoid::Document field :name, type: String set_callback(:create, :before) do |document| # Message sending code here. end end
関連付けコールバック
Mongoid には関連付けに固有のコールバックのセットがあります。これらは次のとおりです。
after_add
after_remove
before_add
before_remove
次の関連付けのいずれかからドキュメントが追加または削除されるたびに、それぞれのコールバックが呼び出されます( embeds_many
、 has_many
、 has_and_belongs_to_many
。
関連付けコールバックは、それぞれの関連付けのオプションとして指定されます。 追加または削除されたドキュメントは、指定されたコールバックのパラメーターとして渡されます。 例:
class Person include Mongoid::Document has_many :posts, after_add: :send_email_to_subscribers end def send_email_to_subscribers(post) Notifications.new_post(post).deliver end