假设我有这样的模型结构:
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。
亚历