2011-06-10 76 views
2

型號:美孚,酒吧,邦克如何根據has_many的屬性找到一個rails對象:通過關係?

class Foo < ActiveRecord::Base 
    has_many :bars 
    has_many :bonks, :through => :bars 
end 

class Bar < ActiveRecord::Base 
    has_many :bonks 
end 

我怎麼能檢索與一個邦克,其名稱是「真棒」

我知道如何與做相關對象的列表Foo.find(...)涉及到:join和a:條件。我想要做的就是避免將那麼多原始的sql放到那裏(特別是當中間有多個模型時)。

喜歡的東西

Foo.find(:all, :conditions=>["bonks.name = ?", 'awesome']) 

其中,顯然,沒有工作,因爲它會產生

Select * from foos where bonks.name = 'awesome' 

可悲的是,我在處理一個軌道1.2的應用程序在這裏,但我不知道認爲此功能從那以後發生了變化。

回答

1
Foo.find(:all, :conditions=>["bonks.name = ?", 'awesome'], :include => :bonks) 

應該產生沿着

Select * from foos, bars, bonks where bars.foo_id = foo.id and bonks.bar_id = bar.id and bonks.name = 'awesome' 
+0

線的東西它生成的'選擇.... FROM FOOS LEFT OUTER JOIN杆ON(FOO。 「ID」=巴。 「foo_id」)LEFT OUTER JOIN bonks在哪裏(bonks.name =「真棒」)' – masukomi 2011-06-13 21:04:09

+0

是啊,我缺兵少將所有加入的,而不是做類似,外表面做的Rails(bonks「bar_id」 =酒吧「ID」。) - 布特很抱歉,很高興它工作了您。 – Yardboy 2011-06-13 21:12:43

1

在1.2 - 在:joins參數的SQL片段是在這裏您最佳的選擇。沒有更好的方法來做到這一點。

相關問題