我在我的應用程序中使用了緩存,並使用了一種常用方法來獲取密鑰。如何使用塊獲取對象?
def cache_key(key, options = {}, &block)
unless block.call.nil?
Rails.cache.fetch(key, expires_in: 30.minutes, &block)
else
return nil
end
end
在上面的例子中,我試圖得到塊的結果。如果它是零,我不想獲取密鑰,我返回零。在這種情況下塊被調用兩次,所以如果我運行這個方法,它會產生兩個查詢。
我該如何更好地簡化它?
將結果存儲在temp var? – apneadiving
這看起來並不像緩存存儲的有效使用。整個觀點應該是,只有在需要時才應該調用該塊。如果你不介意我的問題,你爲什麼這樣做? –
'block.call.nil?'調用'block' - 這就是'call'方法的作用。如果'key'還沒有在緩存中,'Rails.cache.fetch'也會在'block'上調用'call'。這就是爲什麼你看到這兩個調用。也許你打算寫'block.nil?'? –