2009-12-08 41 views
0

我有一種情況,即構建子項但未保存,然後在引用父項的視圖中使用。這導致大量使用軌道記錄緩存。我想讓父母'急切地加載'未保存的子記錄。Rails ActiveRecord - 使用has_many中的'build'時急切加載(有點)

class Parent < ActiveRecord::Base 
    has_many :children 
    def make_children 
    loop.. 
     children_array << children.build(...) 
    end 
    end 
end 

然後在視圖(請注意,「孩子」不保存到DB):

children_array.each do |child| 
    # What's the best way to optimise this so it doesn't 
    # keep selecting parent albeit from the cache? 
    child.parent 
end 
+0

注意:我已經使用術語eager加載在這裏來表明我在做什麼之後,雖然我知道在這種情況下,加載並不可能,因爲它不是從DB獲取的,因此不能使用連接像渴望加載通常一樣。 – 2009-12-08 19:40:11

回答

0

我不知道我理解這個問題。查詢緩存是你的朋友......!您撥打的.parent未打到數據庫。

如果您可以包含更多關於您要做什麼的信息,可能會更容易幫助解決問題。

+0

謝謝jonnii - 你是對的...'查詢緩存是你的朋友'。我有點想切開,並認爲我會發佈一個問題來阻止自己。那麼,查詢緩存是否沒有值得擔心的重大開銷? – 2009-12-08 23:42:10

+0

我不這麼認爲。這絕對比實際擊中分貝更好。 – jonnii 2009-12-09 00:23:55