我有两个证明存在问题的文档模型:
class Component
include Mongoid::Document
include Mongoid::Versioning
recursively_embeds_many
end
class Institution
include Mongoid::Document
has_many :components
end
我知道您不应该从其他文档引用嵌入式模型。我希望通过递归嵌入文档,有一种方法可以从另一个文档中引用树的顶部吗?如果根本不可能将这些关系放在一起,那么在保持组件的递归性质的同时,我还需要在Institution和Component之间建立一对多的关系吗?
答案 0 :(得分:2)
你想要做的事听起来很合理,但Mongoid不会让你通过关联将一个可以嵌入另一个类的类关联起来。当我试一试时,在向机构添加(顶级)组件时,我在this file(第218行)中引发了异常。
最简单的选择是在机构中嵌入组件,例如
class Institution
include Mongoid::Document
embeds_many :components
end
否则,如果你想与不同的机构共享组件树,我想你需要在模型中引入某种容器对象,并定义与Institution的许多关联,例如:
class Component
include Mongoid::Document
include Mongoid::Versioning
recursively_embeds_many
end
class ComponentTree
include Mongoid::Document
embeds_many :components
has_and_belongs_to_many :institutions
end
class Institution
include Mongoid::Document
has_and_belongs_to_many :component_trees
end