Questo è probabilmente semplice ma non riesco a trovare un esempio da nessuna parte.FactoryGirl sovrascrive l'attributo dell'oggetto associato
I due fabbriche:
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
Quello che voglio fare è ignorare alcune delle attributi utente quando creo un profilo:
p = FactoryGirl.create(:profile, user: {email: "[email protected]"})
o qualcosa di simile, ma non posso ottieni la sintassi giusta. Errore:
ActiveRecord::AssociationTypeMismatch: User(#70239688060520) expected, got Hash(#70239631338900)
so che posso farlo creando l'utente prima e poi associarlo con il profilo, ma ho pensato che ci deve essere un modo migliore.
O questo funzionerà:
p = FactoryGirl.create(:profile, user: FactoryGirl.create(:user, email: "[email protected]"))
ma questo sembra troppo complessa. Non c'è un modo più semplice per sostituire un attributo associato? Qual è la sintassi corretta per questo ??
Grazie, ma vorrei che funzionasse per qualsiasi attributo, quindi non vorrei doverlo codificare per ognuno come quello. Forse nessun altro ha bisogno di questo ... – bobomoreno
Penso che il tuo esempio abbia un errore. Cambia 'dopo (: create)' per essere 'profile.user.email = valutator.user_email a meno di valutator.user_email.nil?' – Kelly