Обратные вызовы mongoid вызываются дважды во встроенном объекте второго уровня
Я работаю со встроенной коллекцией второго уровня в монго. Следующий код показывает базовую структуру того, что у меня есть:
class Parent
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Paperclip
embeds_one :child, class_name: 'Parent::Child', cascade_callbacks: true
after_update :parent_log_changes
end
class Parent
class Child
include Mongoid::Document
embedded_in :parent, inverse_of: :child
embeds_one :grand_child, class_name: 'Parent::GrandChild', cascade_callbacks: true
end
end
class Parent
class GrandChild
include Mongoid::Document
field :enable, type: Boolean, default: true
embedded_in :child, class_name: 'Parent::Child'
after_update :grand_child_log_changes
end
end
Идея кода заключается в том, чтобы иметь возможность регистрировать изменения, примененные к родителю, с помощью функции parent_log_changes.
То же самое для GrandChild, когда он сохранен, код должен обновить изменения через функцию grand_child_log_changes.
Итак, в контроллере у меня есть:
class ParentsController < ApplicationController
before_action :load_parent
def grand_child_update
@parent.child.grand_child.enable = true
flash[:notice] = 'Successfully updated' if @parent.save
end
end
Когда выполняется @ parent.save, выполняются обратные вызовы GrandChild.
Проблема в том, что grand_child_log_changes вызывается дважды, создавая дополнительную запись в журнале.
Я предполагаю, что проблема в том, что cascade_callbacks: true установлен как в Parent, так и в Child, но это единственный способ вызвать изменения из @ parent.save.
Другая полезная информация: версия Mongo: v3.2.9 версия Mongoid: 5.1.6 версия Rails: 4.2.5.2