2013-07-01 112 views
1

我有我試圖訪問一個HAS_ONE條件,但我有一個小麻煩ActiveRelation其中兒童語句屬性

Solicitation belongs_to :lead 
Lead has_many :solicitations 

我的第一個語句中抓取所有募捐爲用戶

@solicitations = current_user.solicitations.includes(:lead) 

我已經可以訪問屬性lead.case_type,並且可以循環訪問關係並手動將它們放在他們的位置,但是我認爲它們是一種更簡單的方法。

我所試圖做的是類似於

@solicitations.where("lead.case_type = ?", "Civil") 

東西,我嘗試了這些,並收到未知列錯誤lead.case_type

Solicitation.all(:conditions => {:lead => {:case_type => 'Civil'}}, :joins => :lead) 

回答

1

的問題是,你正在使用lead.case_type,但是(如果你遵循Rails的慣例)你的表名是leads。這應該工作:

@solicitations = current_user.solicitations.includes(:lead).where("leads.case_type = ?", "Civil") 

您也可以使用joins爲:

@solicitations = current_user.solicitations.joins(:lead).where("leads.case_type = ?", "Civil") 

includes做外連接,而joins做一個內部聯接。既然你在查詢連接的表,那麼內部連接在這裏會更好。

where你總是要使用表名(複數),但在includesjoins它取決於關係。在這種情況下,solicitation屬於lead,所以您必須使用:lead(單數)。這有點令人困惑,但我希望這可以爲你解決。

+0

這兩個工作,非常感謝你對加入與包括的語法和解釋的幫助! – Austio