当封闭在find()中时,ActiveRecord :: Base属性不起作用

时间:2017-10-26 05:24:01

标签: ruby-on-rails ruby activerecord

我在edit.html.erb视图中,渲染_form.html.erb partial。

下面的代码本身会输出整数' 5'

<%= ff.object.product_id %>

但是当我将它包含在find函数中时,它会输出一个错误: 无法找到没有ID的产品

<%= @purchase_order.new_record? ? '' : @products.find(ff.object.product_id).name %>

如果我对整数进行硬编码,它将起作用

<%= @purchase_order.new_record? ? '' : @products.find(5).name %>

如何让ff.object.product_id在find()中工作?

<%= form.nested_fields_for :purchase_order_items, wrapper_tag: :tr do |ff| %>
      <td class="col-md-1">
        <div class="input-product_code-div">
          <%= @purchase_order.new_record? ? '' : @products.find(ff.object.product_id).code %>
        </div>
        <%= ff.hidden_field :product_id, class: "input-product_code" %>
      </td>
      <td>               
        <div class="input-product_name-div">            
          <%= @purchase_order.new_record? ? '' : '' %>
        </div>
      </td>
      <td class="col-md-1">
        <%=  ff.number_field :quantity, :step => "0.01", class: "form-control input-quantity" %>        
      </td>
      <td class="col-md-1">
        <%=  ff.number_field :unit_price, :step => "0.01",class: "form-control input-unit_price" %>
      </td>  
      <td>
        <div class="input-currency-div"></div>
        <%= ff.hidden_field :currency, class: "input-currency" %>
      </td>  
      <td align="center">
        <%= ff.remove_nested_fields_link "", class: 'glyphicon glyphicon-trash input-remove-row', role: 'button' %>
      </td> 
    <% end %>

2 个答案:

答案 0 :(得分:1)

在下面的代码行中,

<%= @purchase_order.new_record? ? '' : @products.find(ff.object.product_id).name %>

您正在检查@purchase_order是否是新记录,这是可以的。

但是你没有检查ff.object是否是新记录?

ff.object可能是新记录,并且没有填充product_id列,这会导致错误。

我认为你应该把它写成

<%= ff.object.new_record? ? '' : @products.find(ff.object.product_id).name %>

答案 1 :(得分:0)

是的,我同意@Amulya可能是ff.object可能是新的记录。

但是,不是对所有产品使用查询查询,而是可以用

替换它
<%= ff.object.product.try(:name) %>