活动记录:过滤不同的值

时间:2015-12-09 20:15:14

标签: ruby-on-rails activerecord

我的RoR应用程序中的表中有几个条目:

{id: 1, item_id: a, ...}
{id: 2, item_id: a, ...}
{id: 3, item_id: a, ...}
{id: 4, item_id: b, ...}
{id: 5, item_id: b, ...}
{id: 6, item_id: c, ...}
{id: 7, item_id: d, ...}
{id: 8, item_id: d, ...}

我想创建一个过滤 distinct item_id的查询,并返回第一个匹配的条目,以便结果为

{id: 1, item_id: a, ...}
{id: 4, item_id: b, ...}
{id: 6, item_id: c, ...}
{id: 7, item_id: d, ...}

使用时

select(:item_id).distinct

我无法访问条目的其他属性。如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

如果您只想获得每个item_id的最低ID,可以使用聚合查询来检索这些ID:

grouped_with_min_id = Model.group(:item_id).minimum(:id)
rows = Model.find(grouped_with_min_id.map(&:id))

这可能不是最有效的解决方案,因为它使用两个查询。但是其他方法可能需要您使用Model.find_by_sql并编写自己的sql。

免责声明:我没试过。