railsで3つのテーブルを left join して count する

rails

以下のように project は user に所属し、 user は company に所属しているモデルを考えます。

class Project < ApplicationRecord              
  belongs_to :user
end

class User < ApplicationRecord              
  belongs_to :company
  has_many :projects
end

class Company < ApplicationRecord              
  has_many :users
end

この状況で company_id 毎に、 project.deleted = 0 の project 数を集計したいとします。

ただし、companyは id= 1, 2 のみを対象とする。

このクエリをスマートに生成してくれる、メソッドは以下になります

@projects = Project.where(deleted: 0)
                   .left_joins(user: :company)
                   .where(companies: { id: [1, 2})

@size_hash = @projects.group(:company_id).size
タイトルとURLをコピーしました