Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 递归引用Mongoid会嵌入另一个文档中的多个_Ruby On Rails_Ruby_Mongoid - Fatal编程技术网

Ruby on rails 递归引用Mongoid会嵌入另一个文档中的多个

Ruby on rails 递归引用Mongoid会嵌入另一个文档中的多个,ruby-on-rails,ruby,mongoid,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 我理解您不应该从另一个文档中引用嵌入式模型。然而,我希望通过递归嵌入的文档,有一种方法可以从另一个文档引用

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

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

  recursively_embeds_many
end

class Institution
  include Mongoid::Document

  has_many :components
end

我理解您不应该从另一个文档中引用嵌入式模型。然而,我希望通过递归嵌入的文档,有一种方法可以从另一个文档引用树的顶部?如果无法将这些关系一起使用,在保持组件的递归性质的同时,我必须在机构和组件之间建立一对多关系,这有什么选择?

您尝试的做法听起来很合理,但Mongoid不允许您通过关联将可嵌入另一个类的类关联起来。当我尝试时,在(第218行)向机构添加(顶级)组件时,出现了一个异常

最简单的选择是在机构中嵌入组件,例如

class Institution
  include Mongoid::Document

  embeds_many :components
end
否则,如果您想与不同机构共享组件树,我想您需要在模型中引入某种容器对象,并定义许多与机构的关联,例如:

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

这基本上就是我所做的。这并不是说概念上的组件不属于嵌入在机构中的组件,而是每个机构都会有很多组件,它们会嵌套得很深,甚至不想考虑文档大小限制。啊,是的,文档大小限制似乎常常是嵌入文档中的一个因素。虽然文档大小的限制最近已从4增加到16MB,但从性能角度来看,实际限制可能要低得多。