Ruby on rails Mongoid:构建父级时自动初始化嵌入文档

Ruby on rails Mongoid:构建父级时自动初始化嵌入文档,ruby-on-rails,mongodb,initialization,mongoid,embedded-database,Ruby On Rails,Mongodb,Initialization,Mongoid,Embedded Database,有没有办法让嵌入文档在mongoid中构造时自动初始化?我的意思是,给定一个嵌入车库文档的用户。我必须编写以下代码来完全设置车库的用户: user = User.create!(name: "John") user.build_garage user.garage.cars << Car.create!(name: "Bessy") user=user.create!(姓名:“约翰”) user.build\u车库 user.garage.cars您可以向用户模型添加如下回调: c

有没有办法让嵌入文档在mongoid中构造时自动初始化?我的意思是,给定一个嵌入车库文档的用户。我必须编写以下代码来完全设置车库的用户:

user = User.create!(name: "John")
user.build_garage
user.garage.cars << Car.create!(name: "Bessy")
user=user.create!(姓名:“约翰”)
user.build\u车库

user.garage.cars您可以向用户模型添加如下回调:

class User
  ...
  after_initialize do |u|
    u.build_garage unless u.garage
  end
  ...
end

该回调在类的每次实例化之后激发,因此它在“查找”和“新建”之后激发。

Mongoid 3具有
autobuild
选项,该选项告诉Mongoid在访问关系时实例化一个新文档,并且该关系为
nil

embeds_one :label, autobuild: true
has_one :producer, autobuild: true

在找到一个好主意后触发是因为这不意味着它将覆盖以前的嵌入文档吗?是否有任何mongoid自动为用户执行此操作?我编辑了答案以修复您的第一点。不,没有自动操作系统。我认为这样的功能属于实际的应用程序代码。你太棒了!我试图使用initialize方法来完成这项工作。尽管我先打电话给super,但条件失败并添加了一个额外的文档。我想补充一点,也许你应该加一个车库,是吗?对于unlessMongoid 3现在有一个选项,