0

次のようなコードを含む 2 つのビューがあるとします。

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このステートメントの前にロケールを設定していることを確認してください。

のドキュメントcache_path

注:変換のスコープ ( 'some') を使用して、ネストされたすべてのメッセージをハッシュとして取得しています。

于 2012-06-15T17:46:55.847 に答える