ActiveRecord Запрос для has_many: сквозная модель - PullRequest
6 голосов
/ 31 июля 2011

Как запросить для компаний с определенным филиалом в отношении "has_many: through"?

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

"Найти все компании с ID филиала 3«

1 Ответ

14 голосов
/ 31 июля 2011
Company.includes(:branches).where(:branches => {:id => 3})

или

Branch.find(3).companies

ОБНОВЛЕНИЕ Фактически у первого фрагмента есть один недостаток: он охотно загружает филиалы вместе с компаниями.Чтобы избежать этих издержек, вы можете использовать левое соединение:

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