2

私はまだ頭MongoDBMongoid悩ませています。特に。

User私が を持っていて、それぞれUserがを持っているとしましょうThingamajig。を作成するときにUser 、システムがそのための空白も自動的に作成するようThingamajigにしUserます。

それぞれThingamajigwhatsit、値がある場合は一意でなければならないフィールドがありますが、作成時に値を持たないことは許可されています。

そこで、次のクラスを定義します。

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. namea のフィールドUserが必須であることを指定するにはどうすればよいですか?

参考までに、私はSintaranotを使用していますRails(それが誰にとっても重要な場合)。

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 に答える