我有这行代码可以完全执行我想要的操作。但是我不知道为什么会起作用。
Rails.cache.fetch(key, expires_in: 1.day) do
a << b
end
如果该键在Rails缓存中不存在,则应该将b添加到a中。
为什么我感到困惑?
Rails.cache.fetch(key, expires_in: 1.day)
返回nil,无论密钥是否已在高速缓存中。
问题: 为什么在高速缓存中没有密钥的情况下代码块会运行,而在其他情况下则不会运行?
其他详细信息:Rails缓存已连接到Redis。
答案 0 :(得分:0)
尽管do ... end
返回Rails.cache.fetch
,但评估nil
块可能会令人困惑。但是do ... end
块不会在nil
响应之上运行。
实际上,do ... end
块是fetch
方法调用的附加参数。看看source code of fetch
。
没有块fetch
基本上只做一件事–在第328行调用read(name, options)
。但是,有了块,它的工作方式更多(第307至324行)