2012-12-13 23 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