shimgo
4/2/2017 - 1:37 PM

FactoryGirlでアソシエーションを張ってるのにうまくcreateできない

FactoryGirlでアソシエーションを張ってるのにうまくcreateできない

twitter_user belongs_to userの関係がある場合、twitter_userにuserのデフォルト値が必要。
userの方にデフォルトでtwitter_userを指定してしまうと無限ループになるので注意。
userのtraitで条件をつければよい。これでuser側側からはFactoryGirl.create(:user, :with_twitter_user)で、twitter_user側からはFactoryGirl.create(:twitter_user)でcreate可能。

FactoryGirl.define do
  factory :twitter_user do
    sequence(:uid) {|n| "uid#{n}"}
    sequence(:nickname) {|n| "nicknamme#{n}"}
    user
  end
  
  factory :user do
    sequence(:username) {|n| "ユーザ#{n}"}
    trait :with_twitter_user do
      twitter_user
    end
  end
end