如何查询以使用Rails返回联接表中最常见的外键

时间:2018-07-20 21:31:37

标签: ruby-on-rails arel

我有3个模型。项目,项目材料和材料

一个项目有许多ProjectMaterials和许多通过ProjectMaterials编写的材料。

这是双向的,ProjectMaterial充当具有用户可提交属性的联接表。

我想查询ProjectMaterial模型以查找material_id的最常用值。这样,我可以使用它来查找最常用的材料。

任何有关查询的帮助将不胜感激。我被卡住了。预先感谢!

2 个答案:

答案 0 :(得分:0)

一种方法是通过获取ID来获取数组,然后计数最频繁。

ids = ProjectMaterial.pluck[:material_id]

例如:Ruby: How to find item in array which has the most occurrences?

或者更好,通过查询获得带有计数的哈希:

counts = ProjectMaterial.group(:material_id).count

一旦知道获得哈希值,就可以通过任何红宝石方法进行排序,选择最频繁或最频繁的n个。排序示例:

counts.sort_by { |_, v| v }

答案 1 :(得分:0)

您可以像这样在ActiveRecord查询上链接groupcountsort方法:

ProjectMaterial.group(:material_id).count.values.sort.last

第一部分ProjectMaterial.group(:material_id).count为您提供每个{material_id0 => rows_count0, material_id1 => rows_count1, ...}的哈希值。然后,您可以只获取数组中的哈希值,将其排序并获取最后一项。