J'ai 2 usines. Beta_user et Beta_invite. Fondamentalement avant qu'un Beta_user puisse valablement sauvegarder je dois créer une entrée de Beta_invite. Malheureusement, ces modèles n'ont pas d'associations propres, mais ils partagent un champ de courrier électronique.Usines dépendantes dans Factory Girl
Factory.sequence :email do |n|
"email#{n}@factory.com"
end
#BetaInvite
Factory.define :beta_invite do |f|
f.email {Factory.next(:email)}
f.approved false
f.source "web"
end
#User
Factory.define :user do |f|
f.email {Factory.next(:email)}
f.password "password"
end
#User => BetaUser
Factory.define :beta_user, :parent => :user do |f|
f.after_build do |user|
if BetaInvite.find_by_email(user.email).nil?
Factory(:beta_invite, :email => user.email)
end
end
end
Ainsi, dans l'usine de beta_user bêta Je suis en train d'utiliser l'appel after_build arrière pour créer l'usine de beta_invite.
Cependant, il semble agir async ou quelque chose. Peut-être faire le find_by_email fetch?
Si j'essaie ceci:
Factory(:beta_user)
Factory(:beta_user)
Factory(:beta_user)
Je reçois un échec indiquant qu'il n'y a aucune trace d'un beta_invite avec cet e-mail des utilisateurs.
Si au contraire j'essayer:
Factory.build(:beta_user).save
Factory.build(:beta_user).save
Factory.build(:beta_user).save
pour obtenir de meilleurs résultats. Comme si l'appel de la méthode .build et l'attente de la sauvegarde permettait de créer l'usine beta_invite. Au lieu d'appeler Factory.create directement. Les docs disent que dans le cas d'appeler Factory.create, les callbacks after_build et after_create sont appelés.
Toute aide est très appréciée.
MISE À JOUR:
Ainsi, le modèle de l'utilisateur J'utilise-t un appel before_validation
à la méthode qui vérifie s'il y a une invitation bêta. Si je déplace cette méthode, appelez before_save
à la place. Cela fonctionne correctement. Y a-t-il quelque chose que je suis en train de regarder? Quand factory_girl exécute-t-il les rappels after_build
et after_create
par rapport aux enregistrements before_validation
et before_save
?
Pouvez-vous poster votre classe utilisateur? Le bug peut être dans les validations ou comment ils sont mis en place. Aussi c'est bizarre b/c vous avez dit qu'ils n'ont pas d'associations propres. Que voulez-vous dire exactement par là? Montrer votre code de modèle aiderait. –