Mongoid:嵌入文档在父级构造时自动初始化
Posted
技术标签:
【中文标题】Mongoid:嵌入文档在父级构造时自动初始化【英文标题】:Mongoid: embedded documents automatically initializing on construction of parent 【发布时间】:2011-11-09 05:48:05 【问题描述】:有没有办法让嵌入式文档在 mongoid 构造时自动初始化?我的意思是给定嵌入车库文档的用户。我必须编写以下代码来完全设置用户与车库:
user = User.create!(name: "John")
user.build_garage
user.garage.cars << Car.create!(name: "Bessy")
有没有办法可以跳过调用user.build_garage
?
谢谢
【问题讨论】:
【参考方案1】:Mongoid 3 有autobuild
选项,它告诉Mongoid 在关系被访问并且它是nil
时实例化一个新文档。
embeds_one :label, autobuild: true
has_one :producer, autobuild: true
【讨论】:
【参考方案2】:您可以像这样向 User 模型添加回调:
class User
...
after_initialize do |u|
u.build_garage unless u.garage
end
...
end
这个回调在类的每次实例化后触发,所以它在“find”和“new”之后触发。
【讨论】:
在找到好主意后触发,因为这不意味着它会覆盖以前的嵌入文档吗? 是否有任何 mongoid 汽车可以为用户执行此操作? 我编辑了答案以修正您的第一点。不,没有自动化。我会说这样的功能属于实际的应用程序代码。 老兄。你摇滚!我试图使用初始化方法来做到这一点。即使我先打电话给 super,但条件失败并添加了一个额外的文档。我要补充一点,也许你应该添加一个garage.exists?除非 Mongoid 3 现在有一个选项,autobuild以上是关于Mongoid:嵌入文档在父级构造时自动初始化的主要内容,如果未能解决你的问题,请参考以下文章
嵌套 ControlValueAccessor 的角度验证状态未在父级中正确传播,如何实现此验证?
使用 mongoid 在 rails 中保存带有嵌入对象/文档的对象