2

我仍然在思考MongoDBMongoid尤其是。

假设我有一个User,每个User人都有一个Thingamajig。当我创建时,我希望系统自动为它User 创建一个空白。ThingamajigUser

每个字段Thingamajig都有一个whatsit字段,如果它有值,则该字段必须是唯一的,但在创建时允许没有值。

所以我定义了以下类。

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.find(name: 'some name').thingamajig是零。

问题:

  1. 如何确保每个用户都获得关联的 Thingamajig?和
  2. 如何指定 a 的name字段User是必需的?

仅供参考,我没有使用SintaraRails如果这对任何人都很重要)。

4

1 回答 1

2

1 - 该autobuild: true选项通常应该可以解决问题。我认为问题在于您忘记将关系的另一端添加到 Thingamajig 模型:

class Thingamajig
  include Mongoid::Document
  embedded_in :user
  ...
end

2 - 要指定必填字段,请使用验证

class User
  include Mongoid::Document
  field :name, type: String
  validates_presence_of :name
  ...
end

Mongoid 使用ActiveModel 验证

于 2013-04-27T06:23:15.743 回答