Ruby on rails 如何在分组和计数后包含记录
我有一个表,可以跟踪用户的喜好。现在我用这一行得到了前4名:Ruby on rails 如何在分组和计数后包含记录,ruby-on-rails,ruby,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]] 现在,我不只是想包含完整记录的名称和编号(类似的内容不与模型关联,这就是为什么我必须按名称分组)。最好的方法是什么 它看起来像是一个使用: 用法
Liked_item.group('name').order('count_id desc').count('id').take(4)
这将产生如下数组:
=> [["Name1", 10], ["Name 2", 8], ["Name 3", 5], ["Name 4", 3]]
现在,我不只是想包含完整记录的名称和编号(类似的内容不与模型关联,这就是为什么我必须按名称分组)。最好的方法是什么 它看起来像是一个使用: 用法:
LikeItem.by_name(name)
这将返回一个ActiveRecord集合,其中包含给定名称的所有喜欢项
如果您确实希望有一个以名称为键、以相似项列表为值的散列,则可以使用Ruby(不推荐使用):
但我并不是在搜索某个特定的项目,我只是在查看表并选择出现次数最多的名称。我现在用这行代码得到了结果,但它只返回名称和计数,而不是完整的record@stoerebink我已经编辑了答案。查看最后一行也许更快的方法是查询数据库中的前4项,然后只进行4次查找?@stoerebink我真的不想说,所以决定在你之后:)@stoerebink我没有多少可以补充的答案。除非有一个基于数据库的解决方案,否则使用Ruby-就这么简单:)
LikeItem.by_name(name)
LikeItem.all.group_by(&:name).each_with_object({}) do |(name, collection), hash|
hash[name] = { collection: collection, count: collection.size }
end