我有3个模型。项目,项目材料和材料
一个项目有许多ProjectMaterials和许多通过ProjectMaterials编写的材料。
这是双向的,ProjectMaterial充当具有用户可提交属性的联接表。
我想查询ProjectMaterial模型以查找material_id的最常用值。这样,我可以使用它来查找最常用的材料。
任何有关查询的帮助将不胜感激。我被卡住了。预先感谢!
答案 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查询上链接group
,count
和sort
方法:
ProjectMaterial.group(:material_id).count.values.sort.last
第一部分ProjectMaterial.group(:material_id).count
为您提供每个{material_id0 => rows_count0, material_id1 => rows_count1, ...}
的哈希值。然后,您可以只获取数组中的哈希值,将其排序并获取最后一项。