2017-02-17 46 views
0

我有一张跟踪用户喜欢的表。如何在群组中包含记录并计数

Liked_item.group('name').order('count_id desc').count('id').take(4) 

这将导致一个这样的数组:

=> [["Name1", 10], ["Name 2", 8], ["Name 3", 5], ["Name 4", 3]] 

现在,而不是仅仅名称和数量,我想包括完整的记录现在,我用这条线获得前4名(喜欢没有绑定到模型,这就是为什么我必须按名称分组)。做这个的最好方式是什么?

回答

1

它看起来像一个候选人使用scope

class LikedItem 
    scope :by_name, ->(name) { where(name: name) } 
end 

用法:

LikeItem.by_name(name) 

将返回您指定名称的所有喜欢的ActiveRecord的集合。

如果你确实想与名称的哈希值的关键和like_items作为价值的列表,你可以使用红宝石(不推荐):

LikeItem.all.group_by(&:name).each_with_object({}) do |(name, collection), hash| 
    hash[name] = { collection: collection, count: collection.size } 
end 
+0

但我不是寻找一个特定项目,我只是看着桌子,挑选出现最多的名字。现在我有了这条线,我得到了这个结果,但它只返回名称和数量而不是完整的记录 – stoerebink

+1

@stoerebink我编辑了答案。看到最后一行 –

+0

谢谢队友。只是想知道为什么不推荐最后一行? 编辑:我只是在控制台跑这和它看起来更好,但它不包括数 – stoerebink

相关问题