1

我有以下型号:

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直接调用 courier 对象时运行,而不是在我保存父对象时运行。

因此,拥有一个嵌套表单和一个控制器来创建包括快递员在内的用户不会运行快递员的创建回调。

mongoid 文档说这是设计使然:

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

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

这样做的最佳选择是什么?

4

1 回答 1

0

找到了答案:

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

于 2014-02-18T17:13:23.237 回答