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

我认为片段缓存中不可能有基于会话的逻辑,除非您将该信息作为密钥的一部分,这会违背缓存的目的。

如果评论归用户所有,一种可能的方法是使用基于客户端的逻辑动态添加删除链接。例如,您可以为每条评论嵌入一个 hidden_​​field - owner_id。然后,对于每次渲染,除了缓存的评论(带有所有者 ID)之外,您还可以拥有另一个隐藏字段 - 当前用户 ID。然后,JS 可以为用户拥有的所有评论添加删除链接。

于 2012-05-11T05:04:36.287 回答