To jest prawdopodobnie głupie proste, ale nie mogę znaleźć przykładu nigdzie.Zastąpienie FactoryGirl powiązanego obiektu
Mam dwie fabryki:
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
Co chcę zrobić, to zastąpić niektóre z atrybutów użytkownika podczas tworzenia profilu:
p = FactoryGirl.create(:profile, user: {email: "[email protected]"})
lub coś podobnego, ale nie mogę uzyskaj poprawną składnię. Błąd:
ActiveRecord::AssociationTypeMismatch: User(#70239688060520) expected, got Hash(#70239631338900)
wiem, że mogę to zrobić przez utworzenie użytkownika, a następnie skojarzenie go z profilu, ale pomyślałem, że musi być lepszy sposób.
Albo to będzie działać:
p = FactoryGirl.create(:profile, user: FactoryGirl.create(:user, email: "[email protected]"))
ale to wydaje się zbyt skomplikowane. Czy nie istnieje prostszy sposób na przesłonięcie powiązanego atrybutu? Jaka jest prawidłowa składnia tego?
Dzięki, ale chciałbym, aby działało dla każdego atrybutu, więc nie chciałbym go kodować dla każdego takiego. Może nikt inny tego nie potrzebuje ... – bobomoreno
Myślę, że twój przykład zawiera błąd. Zmień 'after (: create)' na 'profil.user.email = evaluator.user_email, chyba e plik oceniający.user_email.nil?' – Kelly