对于具有缓存摘要的所有语言环境,在Rails 3中使片段过期

时间:2014-03-05 12:06:43

标签: ruby-on-rails ruby-on-rails-3 caching

我正在使用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

但显然这不起作用,因为我在过期调用中错过了该片段的摘要

有没有一种方法可以使此缓存失效?

2 个答案:

答案 0 :(得分:5)

似乎答案是“无法使cache_digests与手动过期一起工作”,请参阅DHH的these answers

要解决此问题,有两种选择:

  1. 绑定 某些模型并依赖基于密钥的过期:{ {1}}

  2. 在缓存通话中跳过摘要手动过期,如问题所示:<% 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