尤其是我的脑袋还在转。
假设我有一个MongoDB
,每个Mongoid
有一个User
。当我创建User
我希望系统也自动地为它创建一个空白的Thingamajig
。
每个User
都有一个Thingamajig
字段,如果该字段有值,则该字段必须是唯一的,但在创建时不允许有值。
所以我定义了以下类。
class Thingamajig
include Mongoid::Document
field :whatsit, type: String
index({whatsit: 1}, {unique: true, name: 'whatsit_index'})
end
class User
include Mongoid::Document
field :name, type: String
index({name: 1}, {unique: true, name: 'user_name_index'})
embeds_one :thingamajig, dependent: :nullify, autobuild: true
end
不管我发现什么
User.create!(name: 'some name')
是不是
User
为零。问题:
如何确保每个用户都获得一个关联的thingamajig?和
如何指定需要
Thingamajig
的whatsit
字段?仅供参考,我使用的是
User.find(name: 'some name').thingamajig
而不是name
(如果这对任何人都重要的话)。 最佳答案
1.autobuild: true
选项通常应该已经完成了这个任务我认为问题是你忘了在Thingamajig模型中添加关系的另一面:
class Thingamajig
include Mongoid::Document
embedded_in :user
...
end
2-要指定所需字段,请使用validations:
class User
include Mongoid::Document
field :name, type: String
validates_presence_of :name
...
end
Mongoid使用ActiveModel validations。