祖先:按孩子数量排序

时间:2015-05-20 03:55:12

标签: ruby-on-rails ruby sorting ancestry

我想根据它拥有的子数对父对象进行排序。 Ancestory有这种方法' child_ids'返回所有儿童ID。有没有办法可以用它来排序我的父对象?

 Project.order(child_ids.count)

 Project.order(Project.child_ids.count)

不能工作。我猜这很明显。任何其他基于孩子的排序方式也可以。谢谢!

修改 查看祖先列。项目ID 2有两个子项6和9,项目1和3都有一个。我需要根据孩子的基本排序,即2,1,3,休息...... enter image description here

1 个答案:

答案 0 :(得分:0)

这肯定是可能的,你只需要加入这两个表就可以使用COUNT个孩子的Project

因为您没有包含您的架构,所以我对类名和外键/主键名做了一些假设。我的解决方案假设子类具有子表的名称,id的主键以及引用Project类/项目表的project_id的外键。

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

有必要使用LEFT OUTER JOIN来包含零{child}的Project

(编辑:请添加子类的模式以及Project及其子类的类定义)

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

如果祖先拥有Project的孩子Project的身份证明,则自我加入会起作用。
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")