我有一个跟踪用户喜欢的表格。现在我使用这一行获得前4名:
Liked_item.group('name').order('count_id desc').count('id').take(4)
这会生成如下数组:
=> [["Name1", 10], ["Name 2", 8], ["Name 3", 5], ["Name 4", 3]]
现在,而不仅仅是我想要包含完整记录的名称和数字(喜欢与模型无关,这就是为什么我必须分组:名称)。做这个的最好方式是什么?
答案 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