0

假设我有这样的模型结构:

class User
  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_one :personal_data
  embeds_one :professional_data

  ...
end

class PersonalData
  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_one :family_data

  field :stuff, :type => String

  ...
end

class ProfessionalData
  include Mongoid::Document
  include Mongoid::Timestamps

  field :stuff, :type => String

  ...
end

因此,简单地说,用户将拥有一棵如下所示的数据树:

User -> PersonalData -> FamilyData
     -> ProfessionalData

您可能已经注意到,我的每个模型都使用 Mongoid:Timestamps,因为我想知道用户的每个子部分何时被修改。

现在变得棘手的是,我希望在创建一个新用户时,它会自动获取使用它创建的所有嵌入式模型,同时使用适当的回调来设置时间戳。

理想情况下,我想避免对数据库进行多次写入,但到目前为止我还没有找到一种优雅的方式来做到这一点。

目前我的用户模型中有这个:

after_create :create_personal_data
after_create :create_professional_data 

在 PersonalData 模型中:

after_create :create_family_data

但是结果不是我所期望的,它适用于 ProfessionalData 模型,它被创建并且 TimeStamps 回调工作, :created_at 和 :updated_at 设置正确。但是对于 PersonalData 模型,它不能正常工作: - 嵌入式模型被创建 - 但回调没有被正确调用,并且 TimeStamps 没有设置 - 嵌入式 FamilyData 没有被创建 un PersonalData

我正在使用带有 Rails 3.2 的 Mongoid 2.4.12

谢谢。

亚历克斯

4

0 回答 0