如何在创建root的同时构建/创建mongoid多级嵌入式文档,同时尊重所有自然回调?

时间:2012-10-28 06:30:40

标签: ruby-on-rails-3 callback mongoid

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

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不会在PersonalData

中创建

我使用Mongoid 2.4.12和Rails 3.2

THX。

亚历

0 个答案:

没有答案