2016-05-02 13 views
1

質問はちょっとです。私としばらくお待ちください。ここにはモデルorderorder itemがあります。 A order has_one order itemFactoryGirlを使ってhas_oneをautosaveと関連付ける方法:true?

class Order < ActiveRecord::Base 
    has_one :order_item, autosave: true, dependent: :destroy, validate: true 
    validates_associated :order_item 
end 

class OrderItem < ActiveRecord::Base 
    belongs_to :order 
    #validations 
end 

order_itemのために宣言されたネストされた属性が存在しないため、mass assignmentためorderコントローラで宣言されていないorder_itemの属性があります。

簡体orderビュー

<%=simple_form_for @order do |f| %> 
    <%=f.input :order_date %> 
    <%=render :inline 'order_item', locals: {f: f} %> 
<% end %> 

部分図_order_items.html.erb

<%=simple_fields_for :order_item do |f| %> 
    <%=f.input :prod_name %> 
<% end %> 

私の質問はどのように上記orderビューのFactoryGrilでorderを表現するということです。

order_item = FactoryGirl.build(:order_item) 
    order = FactoryGirl.attributes_for(:order, order_item: order_item(??)) 

order_item_attribues: order_itemをい(宣言ネストされた属性が存在しないため、それは驚きではありません)動作していないようです。

答えて

2

あなたはattributes_forに直接order_itemオブジェクトを渡すことができる必要があります:

order_item_attrs = FactoryGirl.build(:order_item) 
order_attrs = FactoryGirl.attributes_for(:order, order_item_attributes: order_item_attrs) 

しかしために、ネストされた属性を受け入れるために:私はあなたがテストのようなものを持っているべきだと思い

order_item = FactoryGirl.build(:order_item) 
order = FactoryGirl.attributes_for(:order, order_item: order_item) 
1

次のようにメソッドを初期化してください:

class Order < ActiveRecord::Base 
    accept_nested_attributes_for :order_item 
end 
+0

「accept_nested_」を宣言できません。 attributes_for:order_item'を 'order'で返します。 – user938363

+0

@ user938363なぜですか? –

関連する問題