1

我尝试实现以下数据库结构,但在理解如何使用 mongoid 时遇到问题:

我有一个模型Documents,一个模型DocumentTeam和一个模型Employees。用户可以创建文档并可以选择员工,这些员工将添加到 DocumentTeam。这是我在atm的地方:

class Document
  embeds_one :document_team
end

class DocumentTeam
  has_many :employees
  embedded_in :document
end

class Employee
  belongs_to :document_teams
end

所以我的问题是:我如何告诉 Rails 在创建文档时自动将选定的员工插入到嵌入式 DocumentTeam 中?

此外,我希望能够列出例如员工的所有简报

Employee.first.documents

这也可能吗?

提前谢谢!

4

1 回答 1

1

在 mongoid 中,您不能引用嵌入的文档。您可以从嵌入文档中引用根文档,但反之则不行。即你不能有belongs_to :document_teamsin Employee。此外,一个副作用是嵌入文档中的关系应该是单面的。您可以将建模更改为以下以实现您想要的:

class Document
  embeds_one :document_team
end

class DocumentTeam
  has_and_belongs_to_many :employees, inverse_of: nil
  embedded_in :document
end

class Employee
  def documents
    Document.where('document_team.employee_ids' => self.id)
  end
end

这将允许您使用Employee.first.documents,但您不能将其视为关系并继续执行您可以对关系执行的操作,例如重新分配、推送和拉取文档。您必须通过管理团队和员工关系,DocumentTeam但可以直接访问员工文档以供阅读。

PS:Documentid 不是类的好名字,我猜它在某些情况下可能会与 Mongoid::Document 冲突。

于 2012-06-13T22:16:38.893 回答