如何使具有翻译的视图的缓存无效?

时间:2012-06-15 16:53:53

标签: ruby-on-rails caching internationalization

想象一下,您有两个代码,其代码如下:

controller_a / a.html.erb

  <%= content_tag(:div) do %>
     <%= I18n.t "some.key" %>
  <% end %>

controller_b / b.html.erb

  <%= content_tag(:div) do %>
     <%= I18n.t "some.key" %>
  <% end %>

  <%= content_tag(:div) do %>
     <%= I18n.t "some.other_key" %>
  <% end %>

因此,a.html.erb位于controller_a #a上,而b.html.erb位于controller_b#b上。这两个操作都由caches_action缓存。如何确保在更改some.key翻译密钥时,两个视图都无效?我怎样才能构建通用机制?

1 个答案:

答案 0 :(得分:3)

说,在你的ApplicationController创建以下类方法(或者在lib和extend中创建它):

def self.i18n_digest(*scopes)
    Digest::MD5.hexdigest I18n.t(scopes).to_s
end

然后您可以:cache_path这样使用caches_action选项:

caches_action :some_action, cache_path: { some_key: i18n_digest('some', 'foo') }

只需确保在此语句之前在before_filter中设置区域设置。

Docs on cache_path

注意:我正在使用翻译范围('some')将所有嵌套邮件作为哈希值。