Rails缓存和用户特定内容

时间:2013-11-26 12:39:04

标签: ruby-on-rails caching

假设我有下一个观点:

<% 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 %>

我唯一的想法是将参数添加到缓存密钥 - 简单用户或管理员 - 然后他们将拥有不同的缓存。这是一种正确的方式吗?

2 个答案:

答案 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中使用异步调用,附加链接或(一般来说)所有管理功能。