6

次のような 2 つの Mongoid モデルがあります。

class User
  include Mongoid::Document
  field :name, type: String

  embeds_many :jobs
end

class Job
  include Mongoid::Document
  field :title, type: String

  embedded_in :user
end

これにより、次のようなことができます

user.jobs.create(title: 'Test Job')

ただし、ユーザーが選択できる定義済みのジョブをいくつか用意して、ユーザーのドキュメントに埋め込むことができるようにしたいと考えています。このようなもの:

Job.create(title: 'Predefined Job')
user.jobs << Job.first

ただし、それ自体でジョブを作成すると、次のエラーがスローされます

親ドキュメントがないと、埋め込まれたドキュメント ロールを保持できません。

私は Mongoid に慣れていないので、ドキュメントでこの例を見つけることができません。どうやってこれを行うか知っている人はいますか?

4

1 に答える 1

7

親ドキュメントなしで埋め込みドキュメントの役割を永続化することはできません。

エラーが明確に述べているように、embedded document別のドキュメント内にのみ埋め込むことができます。それはそれ自身として存在することはできません。ロールをユーザーから独立させたい場合は、関係をhas_manyからに変更する必要がありますembeds_many

class User
  include Mongoid::Document
  field :name, type: String

  has_many :jobs
end

class Job
  include Mongoid::Document
  field :title, type: String

  belongs_to :user
end

だからあなたはできる

Job.create(title: 'Predefined Job')
user.jobs << Job.first

job = Job.new(title: 'Predefined Job')
job.save

または、それでも関係を進めたい場合はembed_many、事前定義されたジョブを保存するために別のドキュメントを作成する必要があります

于 2012-11-07T17:24:30.453 に答える