有沒有人知道一種方式來確定Rails關聯是否已被加載?如何確定Rails協會是否急於加載?
我的情況:我有一個結果集有時其中一個關聯是急切加載,有時不是。如果它不是急切加載的,那麼我想使用ActiveRecord的查找來查找關聯。如果它急於加載,我想使用檢測。
例如,假設我的項目模型中有一個「has_many」的shipping_info對象數組。然後:
如果項目急於裝,最有效載荷爲:
item.shipping_infos.detect { |si| si.region == "United States" }
如果產品沒有急於裝,最有效載荷:
item.shipping_infos.where(region: "United States").first
但是,除非我知道它是否是急於加載,我不知道要調用哪個代碼來有效地獲取記錄。如果我使用第一種方法時,它不是急於加載,那麼我必須查找更多的數據庫記錄。如果我在使用第二種方法時被加載,那麼我的加載對象將被忽略。
謝謝布萊恩。我明白你來自哪裏。不過,這個特殊的代碼碰巧在我們整個應用程序中被最頻繁地稱爲部分代碼,所以即使在幾微秒的時間內削減也會產生可測量的差異。我會給#加載?一試。 – wbharding 2009-09-04 06:49:17
這隻適用於has_many關聯!在belongs_to的情況下,這個調用實際上會加載另一個對象(所以它總會是真的) – reto 2009-10-16 12:02:21