如何在分组后包括记录并计算

时间:2017-02-17 18:49:15

标签: ruby-on-rails ruby

我有一个跟踪用户喜欢的表格。现在我使用这一行获得前4名:

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

这会生成如下数组:

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

现在,而不仅仅是我想要包含完整记录的名称和数字(喜欢与模型无关,这就是为什么我必须分组:名称)。做这个的最好方式是什么?

1 个答案:

答案 0 :(得分:1)

它似乎是使用scope的候选人:

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

用法:

LikeItem.by_name(name)

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

如果您确实希望将名称作为键的哈希值和like_items列表作为值,则可以使用Ruby(不推荐使用):

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