1

1つのフラグメントがセッション情報を含むコメントをどのようにキャッシュしますか?例えば:

  <% cache "song_#{@song.id}_comments" do %>
    <ul>
        <% @comments.each do |comment| %>

          <li class="clearfix">
            <p><%= comment.comment %></p>

            <% if can? :destroy, comment %>
              <span>&middot;</span><%= link_to 'delete', comment_path(comment), :confirm => 'Are you sure?', :method => :delete, :remote => true %>
            <% end %>

          </li>
        <% end %>
    </ul>
  <% end %>

ユーザーがコメントを所有している場合は、削除リンクが表示されます。しかし、それ以来、これはキャッシュされます。他のユーザーには表示されないはずです。

4

1 に答える 1

0

その情報をキーの一部にしない限り、フラグメントキャッシュにセッションベースのロジックを含めることはできないと思います。これにより、キャッシュの目的が損なわれます。

考えられる1つの方法は、クライアントベースのロジックを使用して、コメントがユーザーによって所有されている場合に動的に削除リンクを追加することです。たとえば、コメントごとにhidden_​​field--owner_idを埋め込むことができます。次に、レンダリングごとに、キャッシュされたコメント(所有者IDを含む)とは別に、別の非表示フィールド(現在のユーザーID)を使用できます。JSは、ユーザーが所有しているすべてのコメントの削除リンクを追加できます。

于 2012-05-11T05:04:36.287 に答える