我試圖通過續集寶石的eager
方法渴望加載關係數據,同時使用with_sql
來定義用於查詢的SQL(這是一個相當複雜的查詢)。急切的加載根本不起作用。相反,它爲每個返回的行生成每個關係的單個查詢,這正是我試圖避免的。下面是一些代碼:當使用with_sql時,續集是否可以加載關係?
class Foo
many_to_one :rel1
one_to_many :rel2
def self.bar
sql = 'some complex sql'
Foo.with_sql(sql).eager(:rel1, :rel2)
end
end
的問題是,當我叫Foo.bar,REL1和REL2的急切裝載的好像忽略了。我通過觀看日誌驗證了這一點 - 對於with_sql
調用返回的每一行,它會生成2個查詢 - 一個用於rel1,另一個用於rel2。
可能值得注意的是sql
包含3個連接。
這是使用with_sql
的限制。有沒有辦法解決這個限制?
你爲什麼使用'eager'寶石? SQL應該自己「急切加載」。你可以做的一件事是用一個簡單的查詢更新問題,也許只有一個連接。 –