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.
添加和删除行
我正在尝试访问 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.