如何在创建嵌入文档时运行代码

时间:2014-02-18 17:05:31

标签: mongoid mongoid4

我有以下型号:

class User
  include Mongoid::Document

  embeds_one :courier, class_name: "Users::Courier"
  validates_associated :courier
  accepts_nested_attributes_for :courier
end

module Users
  class Courier
    include Mongoid::Document

    embedded_in :user
    after_create :foo

    def foo
        puts "courier created"
    end
end

但只有当我直接在信使对象上调用save时才会运行此回调,而不是在我保存父对象时。

因此,拥有嵌套表单和创建包含信使的用户的控制器不会运行信使的创建回调。

mongoid文档说这是设计的:

  

任何文档都可以使用回调,无论它是否嵌入到其他文档中。请注意,为了提高效率,Mongoid仅触发执行持久性操作的文档的回调。这就是Mongoid旨在支持大型层次结构并处理优化的原子更新,无法在整个文档层次结构中触发回调。

但是,我怎样才能编写在创建信使时执行的代码?在我的情况下,我无法在用户的after_create回调中运行代码,因为有些用户没有嵌入式文档信使。但是当快递员被添加时,我想要进行回调。

最好的选择是什么?

1 个答案:

答案 0 :(得分:0)

找到了答案:

embeds_one :courier, class_name: "Users::Courier", cascade_callbacks: true