2016-09-27 57 views
0

我有兩個模型發佈和喜歡,有他們之間的關係。發佈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") 

回答

1

Use counter_cache讓你總有喜歡的就Post對象計數,那麼你可以調用Post.maximum(:likes_count).first檢索擁有最喜歡的一個職位。同樣,任何Post查詢將包括一個帖子的計數。

+0

好方法,但由於應用程序已經有近300個帖子,我需要編寫一些腳本來更新現有的帖子嗎? – rank

+0

300帖子不是很多。您不必編寫腳本,通常您會編寫一個rake任務(或在生產中使用'rails c')來運行'Post.all.each {| p | Post.reset_counters(p.id,:likes)}'(或任何你喜歡的關聯被命名)。它會在那之後自動更新計數。 – Eric

+0

謝謝@eric – rank

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; 
SELECT l.post_id, count(*) as cnt 
    FROM likes l 
    GROUP BY l.post_id 
    ORDER BY cnt DESC 
    LIMIT 1; 
+0

@serg_stetsuk謝謝 – rank