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 - Fatal编程技术网

Ruby on rails 如何阻止缓存干扰应用程序逻辑

Ruby on rails 如何阻止缓存干扰应用程序逻辑,ruby-on-rails,Ruby On Rails,我试图在我的应用程序中使用Rails 4缓存摘要,但我发现它会干扰很多应用程序逻辑。例如,在此代码中,当缓存包围代码时,应该仅在当前用户id与@user.id匹配的位置显示的链接无法正常工作。这些链接对任何查看页面的人都可见 <% cache @languages do %> <% for language in @languages%> <tr> <td><%= language.name %> </

我试图在我的应用程序中使用Rails 4缓存摘要,但我发现它会干扰很多应用程序逻辑。例如,在此代码中,当缓存包围代码时,应该仅在当前用户id与
@user.id
匹配的位置显示的链接无法正常工作。这些链接对任何查看页面的人都可见

<% cache @languages do %>
   <% for language in @languages%>

    <tr>
      <td><%= language.name %> </td>


      <% if current_user && current_user.id == @user.id %>
       <td><%= link_to  "edit", {:controller => 'lawyer_profiles', :action =>'show', :language_id =>"#{language.id}"}, {:class => "editarea #{language.id}"}%></td>
      <td><%= link_to "destroy", language, :confirm => 'Are you sure?', :method => :delete %></td>
     <% end %>
    </tr>


    <% end %>


 <% end %>

‘律师简介’,:action=>‘show’,:language_id=>“{language.id}”},{:class=>“编辑区{language.id}”}%>
“你确定吗?”,:method=>:delete%>
在这段代码中,缓存干扰了@question实例变量。例如,由于缓存的存在,当我单击“添加答案”链接时,它让我回答了一个与我应该回答的问题不同的@问题,因为缓存在我已经导航离开的页面上保留了实例变量的内存

<% cache @answers do %>
    <% if @answers.empty? %>
    <div class="row">
  <h5>This question hasn't been answered yet:   <% if can? :create, @answer  %>

  <% if current_user && !current_user.answers.map(&:question_id).include?(@question.id) %>
<%= link_to "Add an answer", new_question_answer_path(@question) %>
<% end %>

    <% end %> </h5>
  ....some code not included

这个问题还没有得到回答:
……某些代码未包括在内

如何阻止缓存干扰这样的逻辑?

您必须将逻辑添加到缓存键中。 所以


这将根据用户的答案来查看……除上述内容外,您可能希望将其余内容分解为更多片段缓存。

谢谢。你能再澄清一点吗?我将逻辑放在键中(即充当键),然后在代码中需要的地方重复它?是的,键需要包含所显示内容的逻辑,在本例中是答案和链接或无链接。
cache [@answers, current_user.answers.map...]