祖先:按 children 的数量排序

Ancestry: sorting on number of children

我想根据 children 的数量对我的 parent object 进行排序。 Ancestory 有这个方法 'child_ids' 其中 return 所有 children ids。有什么方法可以用来对我的 parent object 进行排序吗?

 Project.order(child_ids.count)

 Project.order(Project.child_ids.count)

不工作。我想这很明显。任何其他基于 children 排序的方法也可以。谢谢!

编辑: 查看祖先 column.Project id 2 有两个 children 6 和 9,项目 1 和 3 都有一个。我需要根据 children 的数量进行排序,即 2、1、3,其余...

这个应该是可以的,只要把两个table连起来就可以使用Projectchildren的COUNT了。

因为您没有包含您的架构,所以我对 class 名称和外来 key/primary 键名做了一些假设。我的解决方案假设 child class 的 table 名称为 children,主键为 id,外键为 project_id,它引用了项目 class/projects table.

Project.joins("LEFT OUTER JOIN children on projects.id = children.project_id") .group("projects.id") .order("count(children.id) desc")

必须使用 LEFT OUTER JOIN 才能包含零 children 的 Project

(编辑:请添加 child class 的架构以及项目的 class 定义及其 child class)

编辑 5 月 20 日星期三 07:34:58 PDT 2015

如果祖先拥有 Projects child Project 的 ID,则自连接将起作用。
Project.find(6).child_ids的结果是什么?
Project.find(7).child_ids的结果是什么?
我希望分别是 23

Project.joins("LEFT OUTER JOIN projects p1 on projects.id = p1.ancestry .group("projects.id") .order("count(p1.ancestry) desc")