Docs Menu
Docs Home
/ / /
Mongoid
/

コールバック

項目一覧

  • ドキュメント コールバック
  • 関連付けコールバック

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_manyhas_manyhas_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

戻る

ネストされた属性