我有两个模型发布和喜欢,他们之间有关系。发布has_many喜欢。我想找到一种最佳方式来找到哪个帖子最喜欢。
的一种方法count = {}
Post.includes(:likes).each do |post|
count[post.id] = post.likes.count
end
最初我使用的数组不是一个好的数据结构所以我使用了哈希,但我仍然不满足于这种方法。用喜欢的帖子最好的是什么。
此外,我尝试了以下查询,但它没有按预期工作,所以任何人都可以提出更好和最佳的方法。
Post.joins("LEFT OUTER JOIN Likes ON likes.post_id =posts.id").group("posts.id").order("COUNT(likes.id) DESC")
答案 0 :(得分:1)
Use counter_cache
这样您就可以在Post
个对象上计算一些喜欢的内容,然后您可以调用Post.maximum(:likes_count).first
来检索最喜欢的帖子。同样,任何Post
查询都会包含一个类似计数的帖子。
答案 1 :(得分:1)
您不需要加入。通过 post_id 对喜欢进行分组并对其进行统计。带有最大数量的结果 post_id 将是您最喜欢的帖子的ID。然后你可以加入或只选择你要找的帖子。在纯SQL中,它看起来像:
SELECT l.post_id, count(*) as cnt
FROM likes l
GROUP BY l.post_id
ORDER BY cnt DESC
LIMIT 1;