我正在使用带有 cache_digests 的 Rails 3,并且我在模板中有一个片段缓存:
<% cache [I18n.locale,'city-list'] do %>
...
<% end %>
在观察者中,我想像这样使所有语言环境的缓存过期:
I18n.available_locales.each do |loc|
ActionController::Base.new.expire_fragment("#{loc}/city-list")
end
但显然这行不通,因为我在过期调用中缺少该片段的摘要。
是否有一种干净的方法来使缓存过期?
最佳答案
似乎答案是“无法使 cache_digests 与手动过期一起工作”,请参阅 DHH 的 these answers。
要变通,有两种选择:
绑定(bind) key 一些模型并依赖于基于 key 的过期:
<% cache [I18n.locale, city, "city-list"] do %>
跳过缓存调用中的摘要,并手动过期,如问题中所示:
<% cache [I18n.locale, "city-list"], skip_digest: true do %>
关于ruby-on-rails - 在 Rails 3 中为所有具有缓存摘要的区域设置过期片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197271/