David
David

Reputation: 957

Rails: ActiveRecord Query for has_many :through model

How to query for Companies with a certain Branch in a "has_many :through" relationship?

  #company.rb
  has_many :branch_choices
  has_many :branches, :through => :branch_choices

"Find all companies with Branch ID 3"

Upvotes: 9

Views: 6905

Answers (2)

wandering-tales
wandering-tales

Reputation: 171

The following should do the trick and avoids extra queries:

Company.joins(:branches).where(:branches => {:id => 3})

Upvotes: 0

RocketR
RocketR

Reputation: 3776

Company.includes(:branches).where(:branches => {:id => 3})

or

Branch.find(3).companies

UPDATE Actually, there's one downside to the first snippet: it eagerly loads branches along with the companies. To avoid this overhead you may consider using a left join:

Company.
  joins("LEFT JOIN `branch_choices` ON `branch_choices`.`company_id` = `companies`.`id`").
  where(:branch_choices => {:branch_id => 3})

Upvotes: 16

Related Questions