0

假设您有两个视图,其代码如下:

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翻译键时,两个视图都无效?我怎样才能建立一个通用机制?

4

1 回答 1

3

说,在您ApplicationController创建以下类方法(或在库中并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在此语句之前的 a 中设置语言环境即可。

上的文档cache_path

注意:我使用翻译 ( 'some') 的范围来获取其所有嵌套消息作为哈希。

于 2012-06-15T17:46:55.847 回答