2012-03-18 57 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