代码之家  ›  专栏  ›  技术社区  ›  mattC

在循环中呈现部分

  •  -2
  • mattC  · 技术社区  · 6 年前

    我试图将以下部分:

    <% @accepted.each do |question| %>
      <div class="questions-container__content">
        <div class="questions-container__accepted-content">                 
          ...
        </div>  
        <%= render 'question_buttons', collection: @accepted %>
      </div>
    <% end %>
    

    具有 _question_buttons.html.erb :

    <div class="links-container__button-group" id="link-buttons">
      <%= link_to "View submission", coin_question_path(question.coin, question.id), class: "primary-small","data-turbolinks"=>"false" %>
      <%= link_to "Edit", edit_coin_question_path(question.coin, question.id), class: "primary-small","data-turbolinks"=>"false" %>
      <% if !question.accepted? %>
        <%= link_to "Activate" , activate_coin_question_path(question.coin, question.id), class: "primary-small","data-turbolinks"=>"false" %>
      <% else %> 
        <%= link_to "Deactivate" , deactivate_coin_question_path(question.coin, question.id), class: "primary-small","data-turbolinks"=>"false" %>
      <% end %> 
      <% if current_user.admin? %>
        <%= link_to (question.rejected ? "Restore" : "Reject"), reject_coin_question_path(question.coin, question.id), class: "primary-small","data-turbolinks"=>"false" %>
      <% end %>
    </div>
    

    我得到以下错误:

    undefined local variable or method `question' for #<#<Class:0x00007fece6998d08>:0x00007fed02072bb8>
    

    我在这里做错什么了?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Praveen Dhawan BroiSatse    6 年前

    我相信问题是你需要通过 question 变量来自 each 在父视图中循环到部分使用 locals 允许部分用户访问它。

        <%= render 'question_buttons', locals: { question: question } %>
    
        2
  •  0
  •   Ilya Konyukhov    6 年前

    第一:

    呈现集合时,集合的每一项都作为局部变量传递给partial,该局部变量的名称与partial本身的名称相同。这意味着对于这个电话:

    <%= render 'question_buttons', collection: @accepted %>
    

    部分 question_buttons 将为的每个项目调用 @accepted 数组;该项将在partial as中可用 问题按钮

    如果要对项目使用其他名称,例如 question ,您需要将其称为:

    <%= render 'question_buttons', collection: @accepted, as: :question %>
    

    另一个选项——将partial重命名为 问题 :

    <%= render 'question', collection: @accepted %>
    

    第二:

    在代码段中,在循环的每次迭代中调用呈现集合 @接受 元素。如果 @接受 有8个元素,例如,每个元素的部分将呈现8次,即总共8*8=64次。我怀疑这不是你想要的。你的代码看起来像 问题按钮 需要为的每个元素呈现部分 @接受 只有一次。在这种情况下,使用 collection param在这里没有意义。只是传递一个局部变量 问题 部分:

    <%= render 'question_buttons', question: question %>