我想根据它拥有的子数对父对象进行排序。 Ancestory有这种方法' child_ids'返回所有儿童ID。有没有办法可以用它来排序我的父对象?
Project.order(child_ids.count)
或
Project.order(Project.child_ids.count)
不能工作。我猜这很明显。任何其他基于孩子的排序方式也可以。谢谢!
修改 查看祖先列。项目ID 2有两个子项6和9,项目1和3都有一个。我需要根据孩子的基本排序,即2,1,3,休息......
答案 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及其子类的类定义)
如果祖先拥有Project
的孩子Project
的身份证明,则自我加入会起作用。
Project.find(6).child_ids
的结果是什么?
Project.find(7).child_ids
的结果是什么?
我希望分别2
和3
。
Project.joins("LEFT OUTER JOIN projects p1 on projects.id = p1.ancestry
.group("projects.id")
.order("count(p1.ancestry) desc")