Rails 3.2.13缓存键,当值为nil时。一直在查看文档以查找是否有任何选项可以设置为停止此行为,但无法找到任何。
当值为nil时,有没有阻止Rails缓存密钥?
1.8 :001 > value = nil
=> nil
1.8 :002 > Rails.cache.fetch('foo'){value}
=> nil
1.8 :003 > value = true
=> true
1.8 :004 > Rails.cache.fetch('foo'){value}
=> nil
答案 0 :(得分:3)
Rails缓存中没有内置选项来执行此操作,因此我将使用自定义方法来完成您想要的操作,如下所示:
def fetch(key, value)
if Rails.cache.exist?(key)
Rails.cache.read(key)
else
Rails.cache.write(key, value) unless value.nil?
end
end
fetch('foo', nil)
# => nil
fetch('foo', true)
# => true
答案 1 :(得分:0)
不确定是什么问题,nil值将被忽略:
Rails.cache.fetch('foo') { nil }
Cache read: foo
Cache generate: foo
Cache write: foo
=> nil
Rails.cache.fetch('foo'){ "bar" }
Cache read: foo
Cache generate: foo
Cache write: foo
=> "bar"
Rails.cache.fetch('foo'){ nil }
Cache read: foo
Cache fetch_hit: foo
=> "bar"
答案 2 :(得分:-1)
更新的答案:cache_nils
选项是您正在寻找的选项。检查您正在使用的缓存商店,以防它不支持,但对于dalli_store
有效:
1.8 :001 > value = nil
=> nil
1.8 :002 > Rails.cache.fetch('foo'){ value }
=> nil
1.8 :003 > value = true
=> true
1.8 :004 > Rails.cache.fetch('foo', cache_nils: false){ value }
=> true