2012-11-18 17 views
2

想象一下,你有三種型號達到與第二的has_many等級聯合

Class Garage 
    has_many :drivers 
end 

Class Driver 
    belongs_to :garage 
    has_many :cars 
end 

Class Car 
    belongs_to :driver 
end 

這一切都很好。

現在,如果我想補充GarageCar之間的關聯has_many這樣我可以直接garage.cars做不增加新garage_id關鍵Car模式?

我目前使用的Garage模型中定義的cars功能:

def cars 
    drivers.map{ |driver| driver.cars }.flatten 
end 

但這個函數返回一個數組,而不是一個代理,只是不盡如人意,所以我不能使用命名範圍對返回汽車。 再加上它是次優查詢。

謝謝你的幫助。

回答

3
class Garage 
    has_many :drivers 
    has_many :cars, :through => :drivers 
end 

記錄here

+0

好吧,我覺得愚蠢我雖然這僅是爲多對多關聯,謝謝。 –

+0

如果有兩個以上的級別會怎樣? –

+0

「這可以是任何其他類型的關聯,包括其他:通過關聯」,所以只需添加另一個'has_many:something,:through =>:cars'。 –