通过更好的方式找到关联

时间:2012-03-18 06:42:11

标签: ruby-on-rails ruby-on-rails-3

我有这个问题:

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

city_combat_unit是属于城市的combat_unit。 combat_unit具有name属性。 city_combat_unit有一个city_id和一个number_of_units属性:

CombatUnit
  name

City

CityCombatUnit
  city_id
  combat_unit_id
  number_of_units

我想要做的就是为一个具有特定名称的城市获取所有城市战斗部队。我提出的最好(单行)是上面的代码,但我担心我会在某些方面更加简单。我呢?

1 个答案:

答案 0 :(得分:3)

尝试设置has_many :through关系

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')