Использование кэширования фрагментов в Rails для каждого пользователя

У меня есть страница, на которой перечислены все события. Но список событий зависит от того, является ли пользователь администратором или нет. Если я использую кэширование фрагментов на странице, где я перебираю объект модели в представлении, он будет кэшировать все события для администратора.

может ли он обслуживаться из кэша другому пользователю, который не является администратором? Если да,то как я могу использовать кэширование фрагментов для пользователей, не являющихся администраторами и администраторами.

3 ответов


сделать что-то вроде следующего с ключом кэша фрагмент:

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