我试图在每个循环中访问nested_form_fields中的现有父属性。我可以访问关联的“products”属性,但不能访问“sales_order_items”属性。产生的错误是:nil的未定义方法`service_name':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 console,我可以通过DeliveryItem.last.sales_order_item.service_name
答案 0 :(得分:0)
<%= ff.object.sales_order_item.service_name if object.sales_order_item.present?%>
或大于2.3.1
<%= ff.object.sales_order_item&.service_name%>
答案 1 :(得分:0)
问题是表单标题,我将其更改为this,最终找到所有nested_form.object.parent.attributes:
nested_form_fields
问题似乎来自使用fields_for
gem。我还没弄清楚如何在不废弃宝石的情况下解决这个问题,但至少我最后的办法是简单地使用toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//add here the action you need
//example call on back pressed of activity or call
getSupportFragmentManager().popBackStack();
onBackPressed();
}
});
。我想使用gem,因为它已经包含通过link_to和javascript添加和删除行。