2017-11-02 6 views
1

各ループのnested_form_fields内の既存の親属性にアクセスしようとしています。関連する「products」属性にはアクセスできますが、「sales_order_items」属性にはアクセスできません。生成されたエラーは次のとおりです。未定義メソッド `service_name 'for nil:NilClassNested_fields_for内でフォームの.object.attributeにアクセスできません

<%= 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モデルです。私はレールコンソールを使用している場合、実際には、私は問題はフォームのヘッダーた2.3.1

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

このフォームビューをレンダリングしているコントローラコードを表示します - 主にオブジェクトの取得方法に興味があります – kiddorails

+0

@kiddorails - これは編集コントローラの唯一の行です@delivery = Delivery.find(params [:id]) '。 delivery_itemsは配信に属しているため、このedit.html.erbファイルでアクセスできます。 – Bassman

答えて

0

その後、DeliveryItem.last.sales_order_item.service_name

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

やルビーのバージョンのためのより大きな経由でアクセスすることができ、私はこれにそれを変更し、すべてのnested_form.object.parent.attributesは最終的に見つけることができます:

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

問題がnested_form_fields宝石を使用してから来ているようです。私はまだ宝石を捨てることなくこの問題を解決する方法を見つけ出すことができませんでしたが、少なくとも私の最後の手段は単にfields_forを使うことです。私はすでにlink_toとjavascriptを使って行を追加したり削除したりしているので、gemを使いたいです。

+0

オブジェクトはデータベースに存在しますが、このループは検出できません。 ff.object.sales_order_item_idを実行するとid値が出力されますが、ff.object.sales_order_item.any_attributeを実行すると失敗します。私はあなたのソリューションを試して、それはオブジェクトを見つけることができないので、属性を無視するだけです。親オブジェクトを認識するためにループが必要です。 – Bassman

+0

'belongs_to:sales_order_item、optional:true'この行のために、あなたのレコードの一部が' sales_order_item_id'を持たず、 'nil'' for sales_order_item_id'のためにループしている間にエラーが発生します。 'sales_order_item_id'に' nil'というレコードがあるかどうか確認することをお勧めしますか? – Gabbar

+0

すべての 'delivery_items'は' sales_order_item_id'を持っています、それはcreateメソッドでさえデザインの一部です。私のデータベースは現在2つのエントリーしか持っておらず、両方とも 'sales_order_item_id'を持っています。行を 'ff.object.sales_order_item_id'に変更すると、すべての行が値を出力します。 – Bassman

関連する問題