3

フラグメントキャッシュを使用していますが、次のようなユーザー固有のインラインコードがあります。

<% cache @page do %>
  stuff here
<% if current_user %>
  user specific
<% end %>
  more here
<% end %>

したがって、ユーザー固有のコードのいくつかのブロックを除外したいと思います。Railsでそれを行う方法はありますか、それとも最初にifステートメントを作成し、ログに記録されたユーザーと通常の訪問者に対して異なるキャッシュを作成する必要がありますか?(私はこの方法でコードの主要な重複があります)。

4

1 に答える 1

6

ユーザーごとのフラグメントの場合、モデルを配列に配置できます。

<% cache [@page, current_user] do %>

Rails は、次のようにそれらからキャッシュ キーを作成します。

pages/page_id-page_timestamp/users/user_id-user_timestamp

このようにして、タイムスタンプはユーザー/ページの更新時にフラグメントが無効になりますupdated_at(詳細については、 cache_keyを参照してください)。

于 2012-12-13T10:20:46.057 に答える