Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 一个片段如何缓存带有会话信息的注释?_Ruby On Rails_Ruby On Rails 3_Caching - Fatal编程技术网

Ruby on rails 一个片段如何缓存带有会话信息的注释?

Ruby on rails 一个片段如何缓存带有会话信息的注释?,ruby-on-rails,ruby-on-rails-3,caching,Ruby On Rails,Ruby On Rails 3,Caching,一个片段如何缓存带有会话信息的注释?例如: <% cache "song_#{@song.id}_comments" do %> <ul> <% @comments.each do |comment| %> <li class="clearfix"> <p><%= comment.comment %></p> &l

一个片段如何缓存带有会话信息的注释?例如:

  <% 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 %>

如果用户拥有注释,则会显示删除链接。但因为,这是缓存的。它不应该向其他用户显示。

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

一种可能的方法是使用基于客户端的逻辑来动态添加删除链接(如果注释为用户所有)。
例如,可以为每个注释嵌入一个隐藏的\u字段-owner\u id。然后,对于每个渲染,除了具有所有者id的缓存注释外,还可以有另一个隐藏字段-当前用户id。JS然后可以为用户是所有者的所有注释添加删除链接。

PS。我想我应该共享。有一部分是关于你在JS中描述的内容: