尤其是我的脑袋还在转。
假设我有一个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?和
如何指定需要Thingamajigwhatsit字段?
仅供参考,我使用的是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

07-26 09:36