Điều này có lẽ là ngớ ngẩn đơn giản nhưng tôi không thể tìm thấy một ví dụ ở bất cứ đâu.FactoryGirl ghi đè thuộc tính của đối tượng liên quan
Tôi có hai nhà máy:
FactoryGirl.define do
factory :profile do
user
title "director"
bio "I am very good at things"
linked_in "http://my.linkedin.profile.com"
website "www.mysite.com"
city "London"
end
end
FactoryGirl.define do
factory :user do |u|
u.first_name {Faker::Name.first_name}
u.last_name {Faker::Name.last_name}
company 'National Stock Exchange'
u.email {Faker::Internet.email}
end
end
Những gì tôi muốn làm là ghi đè lên một số người sử dụng các thuộc tính khi tôi tạo ra một hồ sơ cá nhân:
p = FactoryGirl.create(:profile, user: {email: "[email protected]"})
hoặc một cái gì đó tương tự, nhưng tôi không thể nhận cú pháp đúng. Lỗi:
ActiveRecord::AssociationTypeMismatch: User(#70239688060520) expected, got Hash(#70239631338900)
Tôi biết tôi có thể làm điều này bằng cách tạo người dùng trước và sau đó liên kết với tiểu sử nhưng tôi nghĩ phải có cách tốt hơn.
Hoặc này sẽ làm việc:
p = FactoryGirl.create(:profile, user: FactoryGirl.create(:user, email: "[email protected]"))
nhưng điều này dường như quá phức tạp. Có cách nào đơn giản hơn để ghi đè thuộc tính được liên kết không? Cú pháp chính xác cho điều này là gì ??
Cảm ơn, nhưng tôi muốn điều đó làm việc cho bất kỳ thuộc tính nào, vì vậy tôi sẽ không muốn mã hóa nó cho mỗi loại như vậy. Có lẽ không ai khác cần điều này ... – bobomoreno
Tôi nghĩ rằng ví dụ của bạn có lỗi. Thay đổi 'after (: create)' thành 'profile.user.email = evaluator.user_email trừ khi evaluator.user_email.nil?' – Kelly