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_manyfromembeds_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 回答