Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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
Sql 有没有办法用RubyonRails计算后代关系模型?_Sql_Ruby On Rails - Fatal编程技术网

Sql 有没有办法用RubyonRails计算后代关系模型?

Sql 有没有办法用RubyonRails计算后代关系模型?,sql,ruby-on-rails,Sql,Ruby On Rails,有一个项目模型,它具有并属于associate_Project:项目模型的别名,并且具有并属于许多文档 class Project < ActiveRecord::Base # Project to Proejct associations # parent project => associate projects = @project.associate_projects has_and_belongs_to_many :associate_projects,

有一个项目模型,它具有并属于associate_Project:项目模型的别名,并且具有并属于许多文档

class Project < ActiveRecord::Base
  # Project to Proejct associations
  # parent project => associate projects = @project.associate_projects
  has_and_belongs_to_many :associate_projects, 
    :foreign_key => 'project_id', 
    :association_foreign_key => 'associate_project_id', 
    :join_table => 'associate_projects_projects',
    :class_name => 'Project', 
    :after_add => :increment_counters, 
    :after_remove => :decrement_counters

  # associate projects => parent projects = @project.projects
  has_and_belongs_to_many :projects, 
    :foreign_key => 'associate_project_id',
    :association_foreign_key => 'project_id',
    :join_table => 'associate_projects_projects'

  has_and_belongs_to_many :docs

end
class项目关联项目=@project.associate\u项目
是否有和属于多个项目:关联项目,
:foreign\u key=>project\u id',
:association\u foreign\u key=>“associate\u project\u id”,
:join_table=>“关联_项目”,
:class_name=>“项目”,
:在添加=>:递增\u计数器之后,
:删除后=>:减量\u计数器
#关联项目=>父项目=@project.projects
_和_属于_很多:项目,
:foreign\u key=>associate\u project\u id',
:关联\u外键=>“项目\u id”,
:join\u table=>“关联\u项目\u项目”
_和_属于_多个:文档
结束

项目模型可以有子项目,并且子项目的数量没有限制。

Project id:1 Project id:2 Document id:1 project_id:2 Project id:4 Document id:3 project_id:4 Project id:3 Document id:2 project_id:3 Project id:4 Document id:3 project_id:4 项目编号:1 项目编号:2 文件编号:1项目编号:2 项目编号:4 文件编号:3项目编号:4 项目编号:3 文件编号:2项目编号:3 项目编号:4 文件编号:3项目编号:4 项目2,3属于项目1,项目4属于项目2和项目3。
在本例中,我想将属于项目2、3和4的文档计算为项目1的文档。项目文件的数量必须为3,因为文件3是重复的

是否有方法计算无限嵌套子项目的所有文档计数?

我想这是不可能的,因为没有限制可以有多少后代

这是可以做到的,但由于它是递归的,可能会变得昂贵。还必须处理循环性。e、 g P1=>P2=P1。计数的另一个模型可能是一种方法。是的,递归方法可能会变得很重。最好使用一些gem,如
祖先
可怕的嵌套集
来更好地处理层次结构持久性(只允许在一个SQL查询中选择整个子树)。之后,您所要做的就是选择与子树中的项目关联的不同文档。感谢您的回复。我将尝试
祖先
宝石。它看起来很有用。我尝试了
祖先
,但孩子不能有多个父母,就像样本中的项目4一样。。。