Rails3 対応 MongoDB ORM、Mongoid 詳解―コールバック

Mongoid は以下のコールバックをサポートしています:

  • before_create
  • before_destroy
  • before_save
  • before_update
  • before_validation
  • after_create
  • after_initialize
  • after_destroy
  • after_save
  • after_update
  • after_validation

コールバックは、他のドキュメントにエンベッドされたものも含めて、全てのドキュメントにあります。Mongoid は永続化アクションが実行された時だけ、コールバックを発動します。Mongoid の狙いは、広い階層をサポートすること、ドキュメントのすべての階層にまたがって実行されない最適化されたアトミックな更新を扱うことにあります。

article.rb:

class Article
  include Mongoid::Document
  field :name
  field :body
  field :slug

  before_create :generate_slug

  protected
  def generate_slug
    self.slug = name.to_permalink
  end
end


コールバックは ActiveModel 由来なので、以下のような新しい構文を使うことができます:

article.rb:

class Article
  include Mongoid::Document
  field :name
  field :body
  field :slug

  set_callback(:save, :before) do |document|
    document.generate_slug
  end

  protected
  def generate_slug
    self.slug = name.to_permalink
  end
end