2017-05-15 2 views
0

Mit factory Ich weiß, ich singuläre Attribute wie diese machen kann:factory-Add has_many Datensatz in eine Fabrik

FactoryGirl.define do 
    factory :company do 
    trading_name { FFaker::Company.name } 
    legal_type { legal_types.keys.sample } 
    updated_by { FactoryGirl.create(:user) } 
    ... 

Jetzt versuche ich, einen Benutzer hinzufügen, aber nicht sicher, wie es zu tun.

Ich habe versucht:

users { FactoryGirl.create(:user) } 

aber bekam eine Fehlermeldung auf einem each Schleife weil users nicht die Sammlung von Benutzern war, wurde es geändert, dass einzelne Benutzer zu sein.

Wie erstellen Sie also has_many Objekte in einer Fabrik? Wie stellen Sie sicher, dass sie miteinander verbunden sind? Einige Leute tun eine after(:create), aber ich möchte die Benutzer vor dem Speichern der Company Rekord machen.

Antwort

1

Association section der Factory Girl Dokumentation sagt after(:create) zu verwenden. In Ihrem Fall wird Code sein:

aktualisieren: In einem Fall, dass Sie after_save Validierung in User Modell haben Sie after(:build) Haken verwenden statt after(:create):

after(:build) do |company| 
     company.users << build(:user) 
    end 
+0

Mein Problem ist, dass die 'Unternehmen 'model hat einen' after_save' Callback, der den 'user' benötigt um zu existieren. Die Callbacks des Modells werden vor den Callbacks der Factory ausgelöst. – Mirror318

+0

Ich habe eine Beschreibung für diesen Fall zur Antwort hinzugefügt, bitte überprüfen Sie es. –

+0

müssten Sie 'build (: user, company: company)' angeben, oder ist das automatisch, da Sie es zu 'company.users' hinzufügen? – Mirror318

Verwandte Themen