从另一个Document引用Mongoid recursively_embeds_many

时间:2011-09-11 17:46:56

标签: ruby-on-rails ruby mongoid

我有两个证明存在问题的文档模型:

class Component
  include Mongoid::Document
  include Mongoid::Versioning

  recursively_embeds_many
end

class Institution
  include Mongoid::Document

  has_many :components
end

我知道您不应该从其他文档引用嵌入式模型。我希望通过递归嵌入文档,有一种方法可以从另一个文档中引用树的顶部吗?如果根本不可能将这些关系放在一起,那么在保持组件的递归性质的同时,我还需要在Institution和Component之间建立一对多的关系吗?

1 个答案:

答案 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