Ruby on rails acts_as_树是否或是否可以用于支持即时加载?

Ruby on rails acts_as_树是否或是否可以用于支持即时加载?,ruby-on-rails,preload,acts-as-tree,Ruby On Rails,Preload,Acts As Tree,使用acts_as_tree,我希望能够通过一个SQL调用预加载整个树,使其完整的子层次结构保持完整。为此,我向表中添加了一个tree_id,它将贯穿该树中的所有子体 我曾探讨过将acts_作为_嵌套的_集(实际上是非常棒的_嵌套的_集)作为一种可能性,但由于我将树移植到其他树中,我发现出于我的目的使用嵌套的集执行了太多的更新。与acts_as_版本一起,这对于我所追求的设计来说是一个不可接受的复杂性。就我的目的而言,我认为作为树的行为更合适 我唯一的问题是获取完整的层次结构的整个树。Activ

使用acts_as_tree,我希望能够通过一个SQL调用预加载整个树,使其完整的子层次结构保持完整。为此,我向表中添加了一个tree_id,它将贯穿该树中的所有子体

我曾探讨过将acts_作为_嵌套的_集(实际上是非常棒的_嵌套的_集)作为一种可能性,但由于我将树移植到其他树中,我发现出于我的目的使用嵌套的集执行了太多的更新。与acts_as_版本一起,这对于我所追求的设计来说是一个不可接受的复杂性。就我的目的而言,我认为作为树的行为更合适

我唯一的问题是获取完整的层次结构的整个树。ActiveRecord的:include选项适用于:子对象,但不适用于:子对象。我满足于编写自己的手动检索和映射关联的方法。关于如何做到这一点,有什么指导或例子吗

在我看来,我把嵌套集放在一边使用tree(支持获取整个结构化树的嵌套集)的唯一好处是选择性地获取树的任何子部分。我同意


我希望避免的解决方案是消除树中的子关联,并定义和手动加载每个树节点上定义的子数组。

我过去研究过这个问题,IIRC发现,通过将表自身连接n次,可以使用单个SQL查询加载已知深度的树;但是,不可能加载任意大小的完整树。因此需要嵌套集设计

如果数据集相对较小,则可以获取所有记录并在内存中重新组装树。也许这就足够了?

您可以使用Gem,它为树提供了一种急切的加载方法

 RootModel.find(1).preload_tree

详细描述见此

我不再寻求此问题的答案。