无法在nested_fields_for中访问Rails form.object.attribute

时间:2017-11-02 04:36:21

标签: ruby-on-rails object model form-helpers

我试图在每个循环中访问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

访问它

2 个答案:

答案 0 :(得分:0)

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

或大于2.3.1

的ruby版本
<%= 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添加和删除行。