Chr*_*fer 3 caching ruby-on-rails
我一直在使用缓存,最近发现我的片段缓存并没有阻止我的控制器执行代码,因为它一直都是.我把问题归结为与cache_key有关,这似乎是一个新功能?
这是我以前的解决方案,不再按预期工作.
产品#显示视图:
cache('product-' + @product.id.to_s) do
# View stuff
end
Run Code Online (Sandbox Code Playgroud)
产品#显示控制器:
unless fragment_exist?('product-19834') # ID obviously dynamically loaded
# Perform slow calculations
end
Run Code Online (Sandbox Code Playgroud)
该缓存工作正常.它写入和读取片段,但它仍然执行控制器(这是我想使用缓存的全部原因).这归结为片段具有添加的唯一ID,因此创建的片段类似于:
views/product-19834/b05c4ed1bdb428f73b2c73203769b40f
Run Code Online (Sandbox Code Playgroud)
因此,当我检查fragment_exist是否正在检查正确的字符串时(因为我正在检查'views/product-19834').我也试过用:
fragment_exist?("product-#{@product.id}/#{@product.cache_key}")
Run Code Online (Sandbox Code Playgroud)
但它使用与实际创建的不同的cache_key进行检查.
我宁愿使用这个解决方案而不是控制器缓存或像互锁这样的宝石.
我的问题是: - 如何在控制器中检查考虑此缓存密钥的特定视图是否存在片段?
正如Kelseydh在链接中指出的,解决方法是在缓存请求中使用skip_digest => true:
视图
cache ("product" + @product.id, :skip_digest => true)
Run Code Online (Sandbox Code Playgroud)
调节器
fragment_exist?("product-#{@product.id}")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |