2016-11-14 2 views
2

Ich habe die folgenden Verbändenfactory Verbindung mit anderen Namen

class Training < ApplicationRecord 
    has_many :attendances 
    has_many :attendees, through: :attendances 
end 

class Attendance < ApplicationRecord 
    belongs_to :training 
    belongs_to :attendee, class_name: 'Employee' 

Die Anwesenheits Tabelle attendee_id und training_id hat.

Nun, wie kann ich eine gültige Attendance mit FactoryGirl erstellen?

Derzeit habe ich den folgenden Code

FactoryGirl.define do 
    factory :attendance do 
    training 
    attendee 
    end 
end 

FactoryGirl.define do 
    factory :employee, aliases: [:attendee] do 
    sequence(:full_name) { |n| "John Doe#{n}" } 
    department 
    end 
end 

Aber ich bekomme

NoMethodError: 
     undefined method `employee=' for #<Attendance:0x007f83b163b8e8> 

Ich habe auch versucht

FactoryGirl.define do 
    factory :attendance do 
    training 
    association :attendee, factory: :employee 
    end 
end 

Mit dem gleichen Ergebnis.

Danke für Ihre Hilfe (oder höflich sein ist nicht erlaubt auf SO ???).

Antwort

4

Wie Sie wahrscheinlich wissen, factory das Symbol verwendet, um zu folgern, was die Klasse ist, aber wenn Sie eine weitere Fabrik mit einem anderen Symbol für das gleiche Modell zu schaffen, müssen Sie factory sagen, was die Klasse zu verwenden ist:

FactoryGirl.define do 
    factory :attendance do 
    training = { FactoryGirl.create(:training) } 
    attendee = { FactoryGirl.create(:employee) } 
    end 
end 

FactoryGirl.define do 
    factory :employee, class: Attendee do 
    sequence(:full_name) { |n| "John Doe#{n}" } 
    department 
    end 
end 

oder die Beziehung manuell zuweisen kann (zum Beispiel, wenn Sie nicht Mitarbeiter Instanz Datenbank an dieser Stelle gespeichert werden wollen):

FactoryGirl.build(:attendance, attendee: FactoryGirl.build(:employee))