2009-04-16 49 views

回答

7

使用与使用Rails.cache访问的关键码略有不同的关键字创建缓存碎片条目。

使用expire_fragment代替(你可以将它发送到控制器):http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html#M000438

+0

这对我不起作用。如果这对你不起作用,请尝试`Rails.cache.delete_matched'views/site_search_form *'` – yivo 2016-08-15 18:40:23

+0

从Rails 3开始,片段缓存最后有一个散列,它基于视图内容生成。这样一来,如果视图更改,缓存会自动分配,但这会使密钥过期变得困难。你可以告诉Rails不要在缓存调用中用`skip_digest:true`添加散列。更多信息:https://www.reinteractive.net/posts/197-if-you-explicitly-expire-cached-fragments-opt-out-of-cache-digests – 2016-12-08 19:34:54

54

的ActionController :: Base.new.expire_fragment(键)

2
Rails.cache.delete "views/site_search_form" 
0

在Rails 5我采取了以下措施,胸围缓存无需诉诸skip_digest: true。我们的问题是,更改I18n字符串的值并不反映在计算出的缓存摘要中,因此缓存不会自动获取。

这里是高速缓存块被定义的视图:

/ views/layouts/_footer.html.slim 
- cache :footer do 
    span= t('shared.footer') 

然后,在轨道控制台I运行:

fragment = ActionController::Base.new.view_context.cache_fragment_name(:footer, virtual_path: 'layouts/_footer.html.slim') 
ActionController::Base.new.expire_fragment(fragment) 

cache_fragment_name将根据virtual_path关键字参数计算出的摘要。