想象一下,您有两个代码,其代码如下:
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
翻译密钥时,两个视图都无效?我怎样才能构建通用机制?
答案 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
中设置区域设置。
注意:我正在使用翻译范围('some'
)将所有嵌套邮件作为哈希值。