【问题标题】:how to run code when embedded document is created创建嵌入文档时如何运行代码
【发布时间】: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 回调中运行代码,因为有些用户没有嵌入的文档信使。但是,当添加了快递员时,我想运行回调。

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

【问题讨论】:

    标签: mongoid mongoid4


    【解决方案1】:

    找到答案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2015-07-21
      • 2017-06-22
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多