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

私はまだこれを試していませんが、すぐにそうなるでしょう。私が採用する可能性が高いアプローチは、関連するモデルと現在のユーザーに基づいてキャッシュ キーを明示的に割り当てることです。フラグメントはユーザーごとに個別にキャッシュされますが、ユーザーごとに 1 回だけです。

これにいくつかのバリエーションを試してください:

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

アクセス許可の変更によってキャッシュが無効になるようにするには、そのような変更が User モデルの updated_at タイムスタンプに触れていることを確認してください。アクセス許可が別のモデルに格納されていると仮定します。

class Permission < ActiveRecord::Base  
  belongs_to :user, :touch => true  
end
于 2010-11-25T13:20:50.433 に答える