7

我正在尝试使用片段缓存来缓存使用 I18n 的 Ruby on Rails 站点上的页脚和导航栏。问题是,更改语言然后以错误的语言显示页脚和导航栏。当区域设置更改时,您如何处理过期的片段缓存?

4

3 回答 3

17

而不是使片段缓存过期,您应该将区域设置作为缓存键的一部分,即类似于

cache :locale => I18n.locale, ... do
  ...
end

这样,不同的用户可以看到页脚/导航栏的不同语言版本,但所有人都会看到缓存的版本。

于 2012-05-20T09:04:19.980 回答
6

在 Rails 3 中缓存片段时,这对我有用:

- cache([object, locale: I18n.locale]) do
于 2013-04-12T14:02:11.483 回答
1

我曾经有这个助手,所以我不需要明确地将语言环境传递给每个cache调用:

# frozen_string_literal: true
module CacheHelper
  # Always using current I18n.locale to cache things.
  def cache(name = {}, options = {}, &block)
    name_with_locale = [name].flatten << I18n.locale.to_s
    super(name_with_locale, options, &block)
  end
end
于 2018-12-19T16:16:50.007 回答