2012-12-13 26 views
3

我使用片段緩存,但我有內嵌代碼是特定的用戶,如:導軌 - 如何排除的代碼塊的碎片緩存

<% cache @page do %> 
    stuff here 
<% if current_user %> 
    user specific 
<% end %> 
    more here 
<% end %> 

所以我想排除的代碼的幾個街區是用戶特定的。有沒有辦法在Rails中做到這一點,或者我應該在開始時做出if語句,併爲登錄用戶和常規訪問者製作不同的緩存? (我會用這種方式重複代碼)。

+0

使用你的助手,然後你可以調用方法,然後 – Richlewis

回答

5

對於每個用戶的片段,您可以把模型數組的數組:

<% cache [@page, current_user] do %> 

Rails會做一個緩存鍵了出來,如:

pages/page_id-page_timestamp/users/user_id-user_timestamp 

這樣你的片段將由於時間戳來自updated_at(詳情請參見cache_key)而在用戶/頁面更新中失效。

+0

hey @jdoe這是偉大的私人信息,用戶擁有,但我期待,說如果用戶登錄或不顯示「編輯此」鏈接。也許我只是在最後在javascript中加載它 – Tom

+0

@Tom你可以用'!! current_user'替換'current_user'。這樣緩存鍵將以'/ true'結尾(如果用戶登錄),否則以'/ false'結尾。 – jdoe

+0

甜美!那樣做了! – Tom