встроенные обратные вызовы документа - PullRequest
6 голосов
/ 31 марта 2011

У меня есть следующая модель с рельсами Mongoid3

class Address
  include Mongoid::Document
  embedded_in :person, :inverse_of => :address
  after_validation :call_after_validation
  before_validation :call_before_validation
  before_update :call_before_update
  after_update :call_after_update
  after_create :call_after_create
  before_create :call_before_create

  field :address1
  field :address2

  private
  def call_after_validation
    puts "After validation callback fired."
  end

  def call_before_validation
    puts "Before validation callback fired."
  end

  def call_before_update
    puts "Before update callback fired."
  end

  def call_after_update
    puts "After update callback fired."
  end

  def call_after_create
    puts "After create callback fired."
  end

  def call_before_create
    puts "Before create callback fired."
  end



end

class Person
  include Mongoid::Document
  embeds_one :address

  field :name
end

Теперь я использовал вложенную форму для одновременного сохранения Персоны и Адреса.

Но все после / до создания / обновления обратные вызовы для адреса не запускаются, за исключением после / до_ валидации

Какие-либо предложения о том, почему после / до создания / обновления не выполняются обратные вызовы для адреса при создании из вложенной формы?

Спасибо

Ответы [ 2 ]

28 голосов
/ 04 февраля 2012

Вы можете использовать cascade_callbacks: true для родительского документа:

embeds_one: child, cascade_callbacks: true

4 голосов
/ 01 апреля 2011

Mongoid запускает только обратный вызов документа, для которого было выполнено действие сохранения.

Следовательно, в этом случае для адреса будет запущен только обратный вызов проверки, потому что Адрес встроен в Персона. Обратный вызов create / update будет вызываться для Person.

...