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