在每个用户的Rails中使用片段缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在每个用户的Rails中使用片段缓存相关的知识,希望对你有一定的参考价值。

我有列出所有活动的页面。但是事件列表取决于用户是否是管理员。如果我在浏览模型对象的页面上使用片段缓存,它将缓存管理员的所有事件。

它可以从缓存服务到另一个非管理员用户吗?如果是,我如何为非管理员和管理员用户使用片段缓存。

答案

使用片段缓存键执行以下操作:

<% cache [current_user.role, :events] do %>
  <b>All the Events based on the Current User's Role</b>
  <%= render events %>
<% end %>

http://api.rubyonrails.org/classes/ActionView/Helpers/CacheHelper.html#method-i-cache

您可以在缓存方法的name参数中传递任意数量的项目,以满足您的环境缓存。

另一答案

你可能想做这样的事情:

<%= cache_unless admin?, project do %>
  <b>All the topics on this project</b>
  <%= render project.topics %>
<% end %>

从Rails docs中取消的例子:http://api.rubyonrails.org/classes/ActionView/Helpers/CacheHelper.html#method-i-cache_unless

另一答案

在你的控制器中:

class ApplicationController < ActionController::Base

    fragment_cache_key do
      current_user.role
    end

#...

这将由Rails的片段缓存使用,并在构造缓存键时添加到fragment_cache_keys列表中。因此,只要您使用任何Rails的片段缓存,您就可以自动为每个用户角色获取唯一的缓存键(或使用您喜欢的任何内容)。

以上是关于在每个用户的Rails中使用片段缓存的主要内容,如果未能解决你的问题,请参考以下文章

为 memcached 和 Rails 组合片段和对象缓存的最佳方式

如何使控制台中的视图缓存片段过期?

Rails - 使用特定属性值缓存所有用户

Rail片段缓存如何使您的应用受益,即阻止数据库调用?

如何缓存片段视图

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?