如何在没有包含embeds_many关联的父文档的情况下允许持久化?

时间:2012-11-05 20:08:20

标签: ruby-on-rails mongodb mongoid

我有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的新手,在文档中找不到任何这方面的例子。有人知道你会怎么做吗?

1 个答案:

答案 0 :(得分:5)

  

如果没有父文档,则无法保留嵌入式文档角色。

由于错误明确指出embedded document只能嵌入另一个文档中。它不能像它自己一样存在。如果您想使角色独立于用户,则需要将关系更改为has_many <{1}}

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 关系,则需要制作单独的文档来存储预定义的作业