我的application.html.slim
模板在概念上看起来像这样:
/ some stuff
= header()
/ more stuff
= yield
/ more stuff
= footer()
现在header()
和footer()
是从外部源加载的,它们是特定于语言的。
我已经引入了语言更改机制(基于URL),因此只要语言发生更改,header
和footer
就会从其他来源加载。
我的问题:
http://myserver.dev/en
http://myserver.dev/de
那么如何清除布局缓存,以便重新加载footer
和header
。
我尝试了以下(无济于事):
在我的application.rb
config.action_view.cache_template_loading = false
config.action_controller.perform_caching = false
Rails.cache.clear
expire_fragment('external/_header.html.slim')
或expire_fragment(%r{external})
答案 0 :(得分:1)
我使用片段缓存并为每种语言创建块缓存来避免这种情况。
在视图中定义块,您将使用以下内容更改语言:
<% cache("block_1_#{I18n.locale}") do %>
...
<% end %>
答案 1 :(得分:0)
由于@gabrimac的帖子我解决了这个问题:
所以当我在视图中定义一个特殊的缓存键时,如下所示:
- cache("language_dependant_partial") do
= ApplicationHelper::footer()
然后我可以使用此特定标识符使缓存无效:
before_filter :clear_cache
def clear_cache
# TODO: This currently clear's the cache on every request
expire_fragment('language_dependant_partial')
end