我有以下型号:
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回调中运行代码,因为有些用户没有嵌入式文档信使。但是当快递员被添加时,我想要进行回调。
最好的选择是什么?
答案 0 :(得分:0)
找到了答案:
embeds_one :courier, class_name: "Users::Courier", cascade_callbacks: true