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