J'utilise Ruby on Rails 3.2.2, FactoryGirl 3.1.0 et FactoryGirlRails 3.1.0. J'ai un modèle qui a deux associations à un autre modèle :
class Article < ActiveRecord::Base
belongs_to a_users, :class_name => 'User'
belongs_to b_users, :class_name => 'User'
end
Dans mon fichier d'usine j'ai :
factory :article, :class => Article do
title "Sample title"
association :a_users, factory: :user
association :b_users, factory: :user
end
En utilisant le code ci-dessus, cela créera deux utilisateurs, mais _J'aimerais que les deux associations aient le même utilisateur_ (sans créer plusieurs utilisateurs). Comment puis-je faire cela?
Je pense que tu pourrais faire :
factory :article do
title 'Sample title'
association :a_users, factory: :user
b_users { a_users }
end
Faites-moi savoir comment cela se passe!
Salut j'ai une question similaire. J'utilise mongoid. Mon scénario est,
class User
include Mongoid::Document
has_many :events
end
class Event
include Mongoid::Document
has_many :speeches
end
class Speech
include Mongoid::Document
belongs_to :event
belongs_to :user
end
J'ai essayé,
FactoryGirl.define do
factory :organizer, class: User do
events {|events| [events.association(:published_event)]}
end
factory :event, class: Event do
name 'Published event'
...
factory :published_event do
published true
speeches {|event| [event.association(:speech)]}
end
end
factory :speech, class: Speech do
name 'Speech 1'
after_build { |speech| speech.user = speech.event.user }
end
end
Et l'a utilisé comme,
FactoryGirl.create(:organizer)
Cela me donne un pointeur nul dans after_build du générateur de discours. discours.événement est nul. En fait mon scénario est plus complexe et j'en ai fait une simple abstraction. Existe-t-il une solution dans l'usine fille pour diriger les données existantes si déjà créées ?
@ashrafuzzaman Je pense que vous voulez en fait créer le discours dans published_event
dans un rappel after_create
et affecter l'événement au discours :
factory :published_event do
published true
after_create do |published_event|
create(:speech, :event => published_event)
end
end
Merci je vais essayer ça et je vous tiens au courant :)
@ashrafuzzaman de la chance ? Je vais fermer ceci pour le moment, mais n'hésitez pas à rouvrir ou à déposer un autre ticket si vous rencontrez toujours des problèmes. Merci!
Merci ça a marché :)
Commentaire le plus utile
Je pense que tu pourrais faire :
Faites-moi savoir comment cela se passe!