【问题标题】:How to get post with maximum likes or post with likes counts in rails如何在rails中获得最大喜欢或喜欢计数的帖子
【发布时间】:2016-09-27 23:54:21
【问题描述】:

我有两个模特发帖和点赞,他们之间有关系。发布 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") 

【问题讨论】:

    标签: sql ruby-on-rails postgresql join


    【解决方案1】:

    Use counter_cache 这样您就可以始终对Post 对象进行点赞计数,然后您可以调用Post.maximum(:likes_count).first 来检索获得最多点赞的帖子。同样,任何Post 查询都将包含帖子的点赞数。

    【讨论】:

    • 不错的方法,但由于该应用程序已经发布了近 300 个帖子,我需要编写一些脚本来更新现有帖子,对吗?
    • 300 个帖子并不是很多。您不必编写脚本,通常您会编写一个 rake 任务(或在生产中使用 rails c)来运行 Post.all.each { |p| Post.reset_counters(p.id, :likes) }(或任何您喜欢的关联名称)。之后它会自动更新计数。
    【解决方案2】:

    您不需要加入。按 post_idlikes 进行分组并计数。结果 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2013-04-03
      • 2020-10-20
      相关资源
      最近更新 更多