2012-03-18 87 views
2

发现我有这个疑问:通过协会以更好的方式

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

一个city_combat_unit是属于一个城市combat_unit。一个combat_unit有一个名称属性。一个city_combat_unit有city_id和number_of_units属性:

CombatUnit 
    name 

City 

CityCombatUnit 
    city_id 
    combat_unit_id 
    number_of_units 

我想要做的就是让所有有特定名称的城市的城市作战部队。最好的我想出了(单行)是上面的代码,但我担心我错过了更简单的事情。我是吗?

回答

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

叶氏,我已经有联想,但似乎有时候,我只是忘了想大声笑。 Thanx;) – Spyros 2012-03-18 17:03:19