如何在另一条记录中嵌入记录?

时间:2016-11-28 23:44:52

标签: ruby mongodb mongoid

我正在处理mongoid文档,我正在试图找出如何创建嵌入新用户的新管理器

class User
  include Mongoid::Document
  field :first_name, type: String
  field :last_name, type: String
  embeds_one :manager, class_name: "Manager"
end

class Manager
  include Mongoid::Document
  field :first_name, type: String
  field :last_name, type: String
  embedded_in :users, class_name: "User"
end

## ------------------------------------------------------------

User.create!(
  first_name: "First1"
  last_name: "Last1"
)

但是我如何创建一个新的管理器,因为它的嵌入式?

1 个答案:

答案 0 :(得分:0)

您确定要在此处embeds_one关联吗?因为对我而言,UserManager似乎具有相同的属性,因此,它们可以包含在单个班级User中,并附加一列manager_id,以确定谁是其中的经理用户:

class User
  include Mongoid::Document
  field :first_name, type: String
  field :last_name, type: String
  belongs_to :manager, class_name: 'User'
end

这样你就可以:

manager = User.create!(first_name: 'First', last_name: 'Last')
user = User.create!(first_name: 'First', last_name: 'Last', manager: manager)

您不希望embeds_one关系的另一个可能原因是,经理可能管理的用户不止一个。因此,无法在不同的User文档中嵌入相同的经理文档。如果我错了,请纠正我。

<强>更新

通常(使用您当前的关系),您可以按如下方式创建嵌入式记录:

user = User.new(first_name: 'First', last_name: 'Last')
user.manager = Manager.new(first_name: 'First', last_name: 'Last')
user.save!