콜백
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
콜백은 Active Support에서 제공되므로 새로운 구문을 사용할 수도 있습니다.
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