45423


たとえば、以下のようなモデルがあります。

[code]

    class Post
      has_many :favorites
    end
    
    class User
      has_many :favorites
    end
    
    class Favorite
      belongs_to :user
      belongs_to :post
    end
    
[/code]

このとき、記事(Post) を、ユーザーによるお気に入り (Favorite) の数でソートしたいです。これは、どうやったら実現できるでしょうか?
Favorite は、 (user, post) にたいしてユニークです。


CC BY-SA 4.0
2018-07-08T10:06:05.243
45422
2018-07-08T11:10:01.503
754
question
ruby-on-rails rails-activerecord
rails で、 has_many しているレコードの個数でソートしたい


rails 5 以上であれば、以下のように、 select, group, left_join を組み合わせることで実現可能です。

[code]

    Post.select('posts.*', 'count(favorites.id) AS favs')
        .left_joins(:favorites)
        .group('posts.id')
        .order('favs desc')
    # SELECT  posts.*, count(favorites.id) AS favs FROM `posts`
    # LEFT OUTER JOIN `favorites` ON `favorites`.`post_id` = `posts`.`id`
    # GROUP BY posts.id
    # ORDER BY favs desc LIMIT 10
    
[/code]


CC BY-SA 4.0
2018-07-08T10:06:05.243
45423
2018-07-08T11:10:01.503
2018-07-08T11:10:01.503
754
754
45422
answer