我在我的应用程序中使用了缓存,并使用了一种常用方法来获取密钥。如何使用块获取对象?
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?'? –