rails3 joins

サークルとメンバーが1対多で関連づけられているデータで、
メンバー数の多い順にサークル名を取得するっていう書き方がわからなかったけど解決した。

リレーションが、

# /app/models/circle.rb
class Circle < ActiveRecord::Base
  has_many :members
end
# /app/models/member.rb
class Member < ActiveRecord::Base
  belongs_to :circle
end

の時に、

Circle.joins(:members)
      .select('count(*) as members_count, circle.id, name')
      .group('circle.id')
      .order('members_count DESC')

とすれば良いようだ。
見やすくするために改行したけど、実際は

Circle.joins(:members).select('count(*) as members_count, circle.id, name').group('circle.id').order('members_count DESC')

だよ。

joinsとcircle.idが必要な点が意味不明ではまってた・・・

参考:Arel in Rails 3

タイトルとURLをコピーしました