2

FactoryGirlファクトリを使用してhas_manyの関係でインスタンスを作成しようとしていますが、失敗しています。 私はコンピュータとネットワークカードという2つのクラスを持っています。各コンピュータには多くのNetworkCardがあります。has_many relationship with FactoryGirl

factory :computer do 
    sequence(:name) { |n| "PC_#{n}" } 
    transient do 
    network_cards_count 1 
    end 

    after(:create) do |computer| 
    create_list(:network_card, evaluator.network_cards_count, computer: computer) 
    done 
end 
012:以下工場定義

class Computer < ActiveRecord::Base 
    has_many :network_cards 
end 

2つのActiveRecordを定義

2.

factory :network_card do 
    sequence(:name) { |n| "NC_#{n}" } 
    sequence(:type) { |n| "TYPE_#{n}" } 
end 

RSpecのテストでコンピュータを作成するとき、私は私が説明できない奇妙な動作を得ます。

@computer_1 = FactoryGirl.create(:computer) 
@computer_1.network_cards.size #Expect 1. Got 0. Why? 
@computer_1.reload 
@computer_1.network_cards.size # Got 1 

アイデアは何ですか?

答えて

2

これを試してみてください:それは@アハメドの答えのようにあなたのブロックではない場合

after(:build) do |computer, evaluator| 
     computer.network_cards << build_list(:network_card, evaluator.network_cards_count, computer: computer) 
end 
2
factory :computer do 
    sequence(:name) { |n| "PC_#{n}" } 
    transient do 
    network_cards_count 1 
    end 

    after(:create) do |computer, evaluator| 
    create_list(:network_card, evaluator.network_cards_count, computer: computer) 
    computer.reload #<----- solves the issue 
    end 
end 
+0

は 'evaluator'利用可能ですか?私はいつもそれを指定しました。 – Dan

+0

@Danそれはタイプミスです。一定 – ntrax111