2012-03-16 14 views
0

工場には2つのfactory_girlファクトリ、contactuserがあります。連絡先には、userの外部キーであるdest_user_idという属性がありますが、NULLでもかまいません。その属性については、userファクトリを使用して新しいユーザーを作成し、そのIDをdest_user_idに割り当てたいとします。それを行う方法はありますか?工場の定義では、他の工場の属性を使用して属性を割り当てます。

+0

FactoryGirl.create(:contact_with_user, :user => @user)を使用するときに持っているdest_user_idの割り当てを制御できないであろうdest_user_idを記述する明確にするためにモデルの詳細を投稿してください。 – nmott

+0

私は、dest_user_idが外部キーであるという事実を追加しました。それはどうでもいい?この質問は 'user'の属性についても同じです。 – FrontierPsycho

+0

潜在的な解決策を少し変更するので、外部キー名と共に関係名を変更していないことを確認したかっただけです。可能なアプローチは以下の通りです。 – nmott

答えて

0

外部キーがdest_user_idの場合、モデル名と同じ関係になっていれば、アプローチを変更してはいけません。 contactbelongs_touseruserhas_oneまたはhas_manycontactsどちらかと仮定すると、以下のように、あなたが欲しいものを達成することができます

まずファクトリを作成:

FactoryGirl.define do 
    factory :user do 
    Field 1 
    Field 2 
    # etc 
    end 

    factory :contact do 
    # Add only the minimum fields required to create a contact, but not the association 
    Field 1 
    Field 2 

    factory :contact_with_user do 
     # then you add the association for this inherited factory 
     # we can use 'user' here as the factory is the same as the association name 
     user 
    end 
    end 
end 

この設定を使用すると、userなしcontactを作成し、したがって、はNULLとなります。ユーザーがのテスト/スペック内にいるとします。

@user = FactoryGirl.create(:user) 
@contact = FactoryGirl.create(:contact_with_user, :user => @user) 

ユーザーの有無にかかわらずcontactを作成し、あなたのことができますので、このアプローチは、柔軟性を最大化:userを作成し、contact次を使用する上でdest_user_idフィールドにIDを割り当てるには

特定のテストに必要な場合にのみuser.idを連絡先モデルに渡すことができます。あなたはその後、FactoryGirl.create(:contact_with_user)を呼び出した場合の両方contactuserが自動的に作成されますが、あなたは二つのモデル間のアソシエーションの名前は何

関連する問題