假设我有下一个观点:
<% cache ['v1', post] do %>
<article class="post">
<%= render post.author %>
<%= post.body %>
</article>
<% end %>
这样可以正常工作,但是如果我需要显示管理员用户的删除,编辑链接,我该如何实施缓存,例如:
<% cache ['v1', post] do %>
<article class="post">
<%= render post.author %>
<%= post.body %>
</article>
<% if @admin? %>
<%# Content specific for Admin %>
<% end %>
<% end %>
我唯一的想法是将参数添加到缓存密钥 - 简单用户或管理员 - 然后他们将拥有不同的缓存。这是一种正确的方式吗?
答案 0 :(得分:1)
将current_user
添加到缓存调用:
<% cache ['v1', current_user, post] do %>
<article class="post">
<%= render post.author %>
<%= post.body %>
</article>
<% if @admin? %>
<%# Content specific for Admin %>
<% end %>
<% end %>
答案 1 :(得分:1)
有几种可能性。如果用户是admin,您可以决定跳过缓存,或者将另一个参数附加到缓存路径。
这是第二种解决方案。
<% cache ['v1', post, "admin:#{admin?}"] do %>
<article class="post">
<%= render post.author %>
<%= post.body %>
</article>
<% if @admin? %>
<%# Content specific for Admin %>
<% end %>
<% end %>
如果您有不同级别的管理员,或者确保管理员始终访问最新鲜的内容,那么第一个可能会非常有用。
另一种可能性是不直接在缓存的帮助器中呈现链接,而只是留下占位符。然后,在AJAX中使用异步调用,附加链接或(一般来说)所有管理功能。