试图干掉代码 - 变量不会传递给部分代码

时间:2016-07-12 14:49:09

标签: ruby-on-rails

我正在尝试为几个报告干掉代码。

我拿了表头代码并将其放入部分代码中。当我使用渲染部分调用它时,这工作正常。但是,当我尝试移动表格的主体代码时,我遇到了一些错误的问题'错误。

我的原始代码是

<% @complaints.each do |complaint| %>
  <% if complaint.product_name == $complaint_group_name then %>
    <tr>
      <td><%= link_to complaint.id, complaint  %></td>
      <td style="text-align: right;"><%= complaint.length %></td>
      <td style="text-align: center;"><%= complaint.disposition %></td>
      <td width="20%"><%= complaint.sales_order %></td>
        . . . 
  <% end %>
<% end %>

无效的代码是我将其移动到部分并尝试渲染部分

<% @complaints.each do |complaint| %>
  <% if complaint.product_name == $complaint_group_name then %>
    <%= render :partial => 'report_body' %>
  <% end %>
<% end %>

我看到

的错误
I, [2016-07-12T10:25:09.046754 #95324]  INFO -- :   Rendered complaints/report_by_product.html.erb within layouts/application (359.4ms)
I, [2016-07-12T10:25:09.046754 #95324]  INFO -- : Completed 500 Internal Server Error in 375ms (ActiveRecord: 140.6ms)
F, [2016-07-12T10:25:09.046754 #95324] FATAL -- : 
ActionView::Template::Error (undefined local variable or method `complaint' for #<#<Class:0x51caab8>:0x95242f8>):
    1: 
    2: 
    3:         <tr>
    4:           <td><%= link_to complaint.id, complaint  %></td>
    5:           <td style="text-align: right;"><%= complaint.length %></td>
    6:           <td style="text-align: center;"><%= complaint.disposition %></td>
    7:           <td width="20%"><%= complaint.sales_order %></td>
  app/views/complaints/_report_body.html.erb:4:in `_app_views_complaints__report_body_html_erb__209592603_78833796'

显然是|投诉|部分块未被部分识别。我要么能够传递它,要么将其包含在部分中 - 但是它会变得混乱,因为每个报告的分组都需要在部分中处理。

简短的问题是我可以通过|投诉|到部分?

2 个答案:

答案 0 :(得分:2)

或者你可以使用这样的简短形式

<%= render 'report_body', complaint: complaint %>

相当于

<%= render partial: 'report_body', locals: { complaint: complaint } %>

答案 1 :(得分:1)

尝试通过投诉&#39;作为局部变量的部分:

render partial: 'report_body', locals: { complaint: complaint }