Rails form.object.attribute не может быть доступен внутри nested_fields_for
Я пытаюсь получить доступ к родительскому атрибуту внутри каждого цикла nested_form_fields. Я могу получить доступ к связанным атрибутам "products", но не к атрибутам "sales_order_items". Сгенерированная ошибка: неопределенный метод `service_name'для nil:NilClass.
<%= 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
2 ответа
Проблема заключалась в заголовке формы, я изменил его на это, и все nested_form.object.parent.attributes наконец могут быть найдены:
<%= form.fields_for :delivery_items do |ff| %>
Проблема, кажется, исходит от использования nested_form_fields
драгоценный камень. Мне еще предстоит выяснить, как решить эту проблему, не выбрасывая драгоценный камень, но, по крайней мере, моим последним средством было бы просто использовать fields_for
, Я хочу использовать драгоценный камень, потому что он уже включает в себя добавление и удаление строк через link_to и javascript.
<%= ff.object.sales_order_item.service_name if object.sales_order_item.present?%>
или для версии ruby больше, чем 2.3.1
<%= ff.object.sales_order_item&.service_name%>