我尝试实现以下数据库结构,但在使用mongoid理解如何执行此操作时遇到问题:
我有一个模型文档,一个模型 DocumentTeam 和一个模型员工。用户可以创建文档,并可以选择添加到DocumentTeam的员工。这就是我的地方:
class Document
embeds_one :document_team
end
class DocumentTeam
has_many :employees
embedded_in :document
end
class Employee
belongs_to :document_teams
end
所以我的问题:如何告诉rails在创建文档时自动将选定的Employee插入到嵌入式DocumentTeam中?
此外,我希望能够列出例如
的所有员工简报Employee.first.documents
这也可以吗?
感谢提前!
答案 0 :(得分:1)
在mongoid中,您无法引用嵌入的文档。您可以从嵌入式文档中引用根文档,但不能反过来。即你belongs_to :document_teams
中不能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:Document
id不是类的好名字,我猜它可能会在某种情况下与Mongoid :: Document冲突。