Ruby on rails 3 如何在创建根目录时构建/创建mongoid多级嵌入式文档,同时尊重所有自然回调?

Ruby on rails 3 如何在创建根目录时构建/创建mongoid多级嵌入式文档,同时尊重所有自然回调?,ruby-on-rails-3,callback,mongoid,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 :f

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

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
因此,简单地说,用户将拥有如下数据树:

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 
在个人数据模型中:

after_create :create_family_data
但是结果并不是我所期望的,它对ProfessionalData模型非常有效,在那里它被创建,时间戳回调工作,:created_at和:updated_at被正确设置。 但是,对于PersonalData模型,它无法正常工作: -创建嵌入式模型 -但是没有正确调用回调,也没有设置时间戳 -嵌入的FamilyData不会在个人数据中创建

我正在使用Mongoid 2.4.12和Rails 3.2

Thx


Alex

好吧,我的错,它工作正常,我在PersonalData模型上遇到了验证问题。然而,这带来了一个额外的问题,在这种情况下,如果不让用户持久化,而不是部分持久化,我会想要什么……当然还有多写问题