Найти через ассоциацию в лучшем виде - PullRequest
2 голосов
/ 18 марта 2012

У меня есть этот запрос:

city.city_combat_units.includes(:combat_unit).where('combat_units.name = ?', 'unit name')

city_combat_unit - это боевая единица, которая принадлежит городу.Боевой блок имеет атрибут имени.У city_combat_unit есть атрибут city_id и number_of_units:

CombatUnit
  name

City

CityCombatUnit
  city_id
  combat_unit_id
  number_of_units

Что я хочу сделать, так это собрать все те боевые единицы города для города с определенным именем.Лучшее, что я придумал (в одной строке) - приведенный выше код, но я боюсь, что мне не хватает чего-то более простого.Я?

1 Ответ

3 голосов
/ 18 марта 2012

Попробуйте установить has_many: через отношение

class City < ActiveRecord::Base
  has_many :city_combat_units
  has_many :combat_units, :through => :city_combat_units
end

class CityCombatUnit < ActiveRecord::Base
  belongs_to :city
  belongs_to :combat_unit
end

class CombatUnit < ActiveRecord::Base
  has_many :city_combat_units
  has_many :cities, :through => :city_combat_units
end

Тогда вы сможете сделать что-то вроде этого

city.combat_units.where(:name => 'unit name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...