Rails - представления, основанные на кэшировании и разрешениях

Я использую CanCan для проверки прав доступа пользователей и условно отображать или подавлять содержимое страницы для моих пользователей. Я хочу кэшировать свои страницы, хотя, и даже с кэшированием фрагментов не могу найти элегантное решение... например:

cache do

# much code

  if can?
    # little code
  else
    # little code

# much code

  if can?
    # little code
  else
    # little code

# much code

Конечно, я не одинок, и есть хороший способ сделать это. Что обычно считается лучшей практикой здесь?

Большое спасибо за ваш вклад.

1 ответ

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

Попробуйте несколько вариантов этого:

cache ["Unique fragment label", @model.cache_key, current_user.cache_key].join do
  # code with and without permissioned elements
end

Чтобы изменения разрешений сделали недействительным кэш, убедитесь, что такие изменения касаются отметки времени updated_at модели пользователя. Предполагая, что разрешения хранятся в отдельной модели:

class Permission < ActiveRecord::Base  
  belongs_to :user, :touch => true  
end
Другие вопросы по тегам