4

我使用 CanCan 检查用户权限并有条件地为我的用户显示或禁止页面内容。我想缓存我的页面,即使使用片段缓存也找不到优雅的解决方案......例如:

cache do

# much code

  if can?
    # little code
  else
    # little code

# much code

  if can?
    # little code
  else
    # little code

# much code

当然,我并不孤单,有一个好方法可以做到这一点。通常认为这里的最佳做法是什么?

非常感谢您的意见。

4

1 回答 1

4

我还没有尝试过,但可能很快就会。我可能采用的一种方法是根据相关模型和当前用户显式分配缓存键。该片段将为每个用户单独缓存,但每个用户仅缓存一次。

尝试一些变化:

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
于 2010-11-25T13:20:50.433 回答