2014-01-29 71 views
0

在運行我的測試時,我得到此錯誤:Validation failed: User can't be blank (ActiveRecord::RecordInvalid)。相關的代碼在這裏。當我將user添加到用戶配置文件中時,我提出了一個循環定義(測試突然完成)。我認爲需要一個回調,但我真的很想知道在哪裏。我真的很感激幫助。 :)工廠女孩麻煩與協會/委託模型

型號/ user.rb

has_one :user_profile, dependent: :destroy, inverse_of: :user 
delegate :first_name, :last_name, :sex, :birthday, 
    :location, :school, to: :user_profile 

型號/ user_profile.rb

belongs_to :user, inverse_of: :user_profile 
validates :user, presence: true 

factories.rb

factory :user do 
    user_profile 

end 

factory :user_profile do 
    first_name Faker::Name.first_name # everything works, I put in the data already. 
    # ????? 
end 

回答

1

終於解決了。發生什麼事情是兩個模型都需要彼此才能保存。所以我給user工廠添加了一個修補程序鉤子。我錯過的是將參考傳遞給用戶本身。

factory :user do |user| 

    after(:build) do |user| 
     create(:user_profile, user: user) 
    end 

    end 

    factory :user_profile do 
    association :user 
    first_name Faker::Name.first_name 
    end 
1

創建廠家是這樣的:

FactoryGirl.define do 
    factory :user do 
     first_name Faker::Name.first_name 
    end 
end 

FactoryGirl.define do 
    factory :user_profile do 
     association :user, strategy: :build 
    end 
end 

user_profile belongs_to的用戶,所以我們創建user_profile關聯。

+0

嗨感謝您的回答,但是當我從刪除'user_profile'了'如果你使用了代理那麼它user_profile_sex而不是user'I得到'委託給user_profile.sex用戶#性別,但user_profile是nil' –

+0

user_profile.sex 使用此user_profile.try(:sex)或檢查它之前的條件,如user_profile.present? – Dheer