2010-03-02 5 views
9

Ich bin gerade in Factory Girl und ich bin in eine Schwierigkeit geraten, die sicher viel einfacher sein sollte. Ich konnte die Dokumentation einfach nicht in ein funktionierendes Beispiel umwandeln.Factory Girl: Eltern Objekte automatisch zuweisen

Angenommen ich folgende Modelle haben:

class League < ActiveRecord::Base 
    has_many :teams 
end 

class Team < ActiveRecord::Base 
    belongs_to :league 
    has_many :players 
end 

class Player < ActiveRecord::Base 
    belongs_to :team 
end 

Was will ich, dies zu tun ist:

team = Factory.build(:team_with_players) 

und haben es ein paar Spieler für mich aufzubauen. Ich versuchte dies:

Factory.define :team_with_players, :class => :team do |t| 
    t.sequence {|n| "team-#{n}" } 
    t.players {|p| 
     25.times {Factory.build(:player, :team => t)} 
    } 
end 

Aber das scheitert auf dem :team=>t Abschnitt, weil t nicht wirklich ein Team ist, es ist ein Factory::Proxy::Builder. I haben, um einem Spieler ein Team zugewiesen zu haben.

In einigen Fällen möchte ich eine League aufbauen und es eine ähnliche Sache machen lassen, mehrere Teams mit mehreren Spielern zu schaffen.

Was fehlt mir?

+0

Ich lief in dieser genau das gleiche Problem (gleiche Fehler) und schaute sich um und haben keine Lösung gefunden. –

Antwort

5
Factory.define :team do |team| 
    team.sequence(:caption) {|n| "Team #{n}" } 
end 

Factory.define :player do |player| 
    player.sequence(:name) {|n| "John Doe #{n}" } 
    player.team = nil 
end 

Factory.define :team_with_players, :parent => :team do |team| 
    team.after_create { |t| 25.times { Factory.build(:player, :team => t) } } 
end 
2

Wie wäre es damit:

Factory.define :team_with_players, :class => :team do |t| 
    t.sequence { |n| "team-#{n}" } 
    t.players do |team| 
    25.times.collect { |n| team.association(:player) } 
    end 
end 
+0

Aber wenn der Spieler einen Hinweis auf das Team benötigt, woher bekomme ich das? In diesem Beispiel bezieht sich "Team" auf ein Factory-Objekt ... –

+0

Ich habe etwas Ähnliches: team.association (: player,: team_id => team) scheint seltsam, funktioniert aber für mich. – Priit

+1

wenn ich das mache klagt es: "Erwartetes Team, aber war FactoryGirl :: Proxy" oder so ähnlich. –

Verwandte Themen