2011-05-20 68 views
1

我有點卡住了活動記錄查詢問題。我想在查詢中執行左連接而不是內連接,但joins方法的結果僅返回內連接。Rails 3:內部連接與協會

Entry. 
    joins(:measurements => :measurement_type). 
    sum(:value, :conditions => ['name = ?','Calories']) 

棘手的部分是:measurements具有belongs_to的關係:measurement_type它是其中名稱列駐留。

此時此功能僅返回用於使用food_posts的用戶的金額。目標是爲所有用戶返回總和。沒有食物職位的用戶將有零和。

我試過谷歌搜索和搜索這裏的其他帖子,但還沒有找到答案。有什麼建議麼?

另外我在我的開發環境和Postgresql中使用SQLite進行生產。

回答

4

如果你想要做一個左連接,而不是一個內部連接,你需要使用自定義的「SQL片段」

在你的榜樣,

relation.joins("left join measurements on measurements.id = measurement_type.measurements_id") 

或者類似的規定取決於你的設置。

這個tutorial總結得很清楚。

+0

謝謝!它看起來像我做了一個比你的例子更長的查詢額外的關聯,這是我堅持。它可以更簡潔,但這裏是我最後的結果:'relation.joins(「LEFT JOIN測量ON measurements.entry_id = entries.id」)。joins(「INNER JOIN measurement_types ON measurement_types.id = measurements.measurement_type_id」 )' – Chanpory 2011-05-20 17:58:11

+0

我很懷疑。我的原始帖子中的數據庫架構不是100%清晰的。附:如果問題解決了您的問題,請不要忘記接受:) – diedthreetimes 2011-05-20 18:09:59

1

MetaWhere創業板的外連接的支持,除其他很多善良:

https://github.com/ernie/meta_where

+1

對於Rails 3.1及更高版本,替換爲[Squeel](https://github.com/ernie/squeel)。瑞安貝茨有一個關於它的Railscast(http://railscasts.com/episodes/354-squeel)。 – 2013-03-19 12:21:56