2010-03-02 20 views
9

Sto appena entrando in Factory Girl e sto incontrando una difficoltà che sono sicuro dovrebbe essere molto più semplice. Non sono riuscito a trasformare la documentazione in un esempio funzionante.Factory Girl: Assegnazione automatica di oggetti padre

Si supponga che ho i seguenti modelli:

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 

Quello che voglio fare è questo:

team = Factory.build(:team_with_players) 

e lo hanno costruire un gruppo di giocatori per me. Ho provato questo:

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 

Ma questo non riesce nella sezione :team=>t, perché t non è davvero un Team, è un Factory::Proxy::Builder. I hanno per assegnare una squadra a un giocatore.

In alcuni casi, desidero creare un League e farlo fare una cosa simile, creando più team con più giocatori.

Cosa mi manca?

+0

Ho appena incontrato questo problema esattamente lo stesso (lo stesso errore) e si guardò intorno e non hanno trovato una soluzione. –

risposta

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

ne dite di questo:

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

Ma se il giocatore ha bisogno di un riferimento alla squadra, dove lo prendo? In questo esempio, "squadra" si riferisce a un oggetto di fabbrica ... –

+0

Ho qualcosa di simile a questo: team.association (: player,: team_id => team) sembra strano ma funziona per me. – Priit

+1

quando lo faccio si lamenta: "Team previsto, ma era FactoryGirl :: Proxy" o qualcosa del genere. –

Problemi correlati