Rails> 3.2中是否可以爲由includes
方法生成的連接語句添加條件?Rails包含條件
假設我有兩個模型,Person和Note。每個人都有很多筆記,每個筆記都屬於一個人。每個音符都有一個屬性important
。
我想找到所有人只預加重要的筆記。在SQL,這將是:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id AND notes.important = 't'
在Rails中,唯一相似的方式做到這一點是使用includes
(注:joins
不會預裝注)這樣的:
Person.includes(:notes).where(:important, true)
不過,這生成的SQL語句的查詢返回不同的結果集:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id
WHERE notes.important = 't'
請注意,第一個結果集包括所有的人,第二個只有人民與重要筆記相關聯。
另請注意:條件自3.1起棄用。
是性能有什麼不同? notes.important ='t'在連接子句中不是語義的,因爲它只考慮一個模型。 – fotanus 2013-05-02 22:04:28
是的。這是一個表現問題。我需要所有的人,如果有的話,急切地加載重要的筆記。 – gusa 2013-05-03 18:16:26
我面臨同樣的問題你是如何最終管理你的查詢的?你是用純SQL編寫的嗎? – 2014-12-23 15:01:31