我正在使用rails 3和cache_digests,我在模板中有一个片段缓存:
<% cache [I18n.locale,'city-list'] do %>
...
<% end %>
在观察者中,我希望使所有语言环境的缓存过期,如下所示:
I18n.available_locales.each do |loc|
ActionController::Base.new.expire_fragment("#{loc}/city-list")
end
但显然这不起作用,因为我在过期调用中错过了该片段的摘要。
有没有一种方法可以使此缓存失效?
答案 0 :(得分:5)
似乎答案是“无法使cache_digests与手动过期一起工作”,请参阅DHH的these answers。
要解决此问题,有两种选择:
绑定键 某些模型并依赖基于密钥的过期:{ {1}}
在缓存通话中跳过摘要,手动过期,如问题所示:<% cache [I18n.locale, city, "city-list"] do %>
答案 1 :(得分:1)
尝试,
<% cache "#{I18n.locale} city-list" do %>
...
<% end %>
#To clear
I18n.available_locales.each do |loc|
ActionController::Base.new.expire_fragment("#{loc} city-list")
end