您好我目前有一個幫助方法,得到Klass.all.map{|m| m.name}
。現在我使用ID從數組中獲取名稱,如果我添加更多,它會自動更新。緩存數據庫結果作爲全球變量
當我在視圖的循環中使用這個幫助器方法時,我認爲它會使得每次都得到Klass的多個查詢,這意味着很多額外的工作。
我想知道如何「緩存」這個數組,或者如果我應該這樣做一個更好的方法。
謝謝!
您好我目前有一個幫助方法,得到Klass.all.map{|m| m.name}
。現在我使用ID從數組中獲取名稱,如果我添加更多,它會自動更新。緩存數據庫結果作爲全球變量
當我在視圖的循環中使用這個幫助器方法時,我認爲它會使得每次都得到Klass的多個查詢,這意味着很多額外的工作。
我想知道如何「緩存」這個數組,或者如果我應該這樣做一個更好的方法。
謝謝!
如果您處於相同的操作中,則SQL緩存將自動完成。你可以看到here的更詳細的解釋。順帶一提,使用pluck
的效率可能更高,如Klass.pluck(:name)
。這會優化你的SQL查詢。
你的helper方法應類似於此
def klass_names
@klass_names ||= Klass.all.map{|m| m.name}
end
謝謝!我覺得它正在被緩存。只是想要一些文件。 – trigun0x2
雖然它緩存了SQL查詢,但它不會緩存Ruby對象。這意味着,每次調用助手方法時都會啓動一個全新的數組。 –