Rails form.object.attribute 无法在 nested_fields_for 内部访问

Rails form.object.attribute cannot be accessed inside nested_fields_for

我正在尝试访问 nested_form_fields 每个循环中的现有父属性。我可以访问关联的 "products" 属性,但不能访问 "sales_order_items" 属性。生成的错误是:nil:NilClass.

的未定义方法“service_name”
<%= form.nested_fields_for :delivery_items, wrapper_tag: :tr do |ff| %>
  <td class="col-md-1">                                           
    <div class="input-product_name-div">   
        <% if ff.object.product.present? %>
          <%= ff.object.product.name %>
        <%else%>
          <%= ff.object.sales_order_item.service_name %> #this line fails
        <%end%>
    </div>
  </td> 
<% end %>

正如您在下面我的模型中看到的那样,它们的关联方式相同。

class Product < ApplicationRecord
    has_many :sales_order_items 
    has_many :delivery_items
end

class SalesOrderItem < ApplicationRecord
    belongs_to :sales_order,  optional: true
    belongs_to :product,  optional: true    
    has_many :delivery_items
end

这是我的 DeliveryItem 模型:

class DeliveryItem < ApplicationRecord
    belongs_to :product,  optional: true
    belongs_to :sales_order_item,  optional: true
end

我确定该项目有服务名称。事实上,如果我使用 rails 控制台,我可以通过 DeliveryItem.last.sales_order_item.service_name

访问它
<%= ff.object.sales_order_item.service_name if object.sales_order_item.present?%>

或 ruby 版本高于 2.3.1

<%= ff.object.sales_order_item&.service_name%>

问题是表格 header,我把它改成了这个,所有 nested_form.object.parent.attributes 终于可以找到了:

<%= form.fields_for :delivery_items do |ff| %>

问题似乎来自使用 nested_form_fields gem。我还没有弄清楚如何在不废弃 gem 的情况下解决这个问题,但至少我最后的选择是简单地使用 fields_for。我想使用 gem 因为它已经包括通过 link_to 和 javascript.

添加和删除行