2009-04-16 45 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關鍵字參數計算出的摘要。