【发布时间】:2014-02-18 17:05:31
【问题描述】:
我有以下型号:
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
但只有当我直接在 courier 对象上调用 save 时才会运行此回调,而不是在我保存父对象时运行。
因此具有嵌套表单和创建用户的控制器(包括 courier)不会运行 courier 的创建回调。
mongoid 文档说这是设计使然:
回调适用于任何文档,无论它是否嵌入到另一个文档中。请注意,为了提高效率,Mongoid 只触发执行持久性操作的文档的回调。这就是 Mongoid 旨在支持大型层次结构并处理优化的原子更新回调不能在整个文档层次结构中触发。
但是我如何编写在创建信使时执行的代码?在我的情况下,我无法在用户的 after_create 回调中运行代码,因为有些用户没有嵌入的文档信使。但是,当添加了快递员时,我想运行回调。
这样做的最佳选择是什么?
【问题讨论】: