2011-12-17 1 views
4

私は、次の工場を設定している:はい、次にそれを使用してのみ、ノーならばならば、私は地域で&状態ファクトリをやりたいFactoryGirlは、新しいモデルを作成する前にモデルのモデルがすでにデータベースに存在するかどうかをチェックできますか?

FactoryGirl.define do 

    factory :country do |f| 
    f.name "USA" 
    f.country_code "USA" 
    f.currency_code "USD" 
    end 

    factory :region do |f| 
    f.name "East Coast" 
    f.country {Country.first} 
    end 

    factory :state do |f| 
    f.name 'CA' 
    f.region {Region.first} 
    f.country {Country.first} 
    end 

end 

は、エントリが既に国のためにデータベース内に存在するかどうかを確認することです新しいモデルを作成する必要があります。ここで

はこれを作成する方法がわからない、私は心の中で持っているものの一例ですが、:

factory :state do |f| 
    f.name 'CA' 
    f.region {Region.first || Factory(:region} 
    f.country {Country.first || Factory(:state} 
end 
私はこれをしたい理由はフォームが選択移入されます自分のデータベースにエントリを注入することである

フィールド&私はキュウリを使用してテストすることができます。

+0

なぜあなたはこれを行うだろうか?私はそれを行う良い理由をイメージすることはできません – lucapette

+1

地域と国のエントリが既に存在しない限り、私のデータベースのスキーマ状態は保存できません。私はテストのために少なくとも3つの状態モデルが必要ですが、リージョンと国のために1つの行を挿入したいだけです。 – Jason

答えて

4

をあなたはこれを実現するためにコールバックを使用することができます。

FactoryGirl.define do 

    factory :country do |f| 
    f.name   "USA" 
    f.country_code "USA" 
    f.currency_code "USD" 
    end 

    factory :region do |f| 
    f.name "East Coast" 
    after_build {|r| r.country = (Country.first || Factory(:country))} 
    end 

    factory :state do |f| 
    f.name 'CA' 
    after_build do |s| 
     s.region = Region.first || Factory(:region) 
     s.country = Country.first || Factory(:country) 
    end 
    end 

end 
関連する問題