在保持“获取或设置”缓存调用的简洁性的同时清除此警告的最佳方法是什么?我真的不喜欢搞定,然后检查nil,然后设置......
# DEPRECATION WARNING: Setting :expires_in on read has been deprecated in favor of setting it on write.
@foo = Rails.cache.fetch("some_key", :expires_in => 15.minutes) do
some stuff
end
答案 0 :(得分:5)
我真的不喜欢搞定,然后检查nil,然后设置......
是的,你会希望避免在每次通话时都这样做,但你仍然必须至少做一次。像这样简单的东西可能适合你:
def smart_fetch(name, options, &blk)
in_cache = Rails.cache.fetch(name)
return in_cache if in_cache
val = yield
Rails.cache.write(name, val, options)
return val
end
然后在你的观点中你可以做到:
@foo = smart_fetch("some_key") do
some stuff
end
请注意,Rails缓存存储具有您在创建时可以设置的默认到期时间,因此您可能不需要在每次调用时覆盖它,除非您需要不同的到期时间。
答案 1 :(得分:5)
@briandoll提供的有用方法的小改动:
def smart_fetch(name, options = {}, &blk)
in_cache = Rails.cache.fetch(name)
return in_cache if in_cache
if block_given?
val = yield
Rails.cache.write(name, val, options)
return val
end
end
答案 2 :(得分:0)