2010-03-02 5 views
9

Właśnie dostaję się do Factory Girl i mam trudności, które na pewno powinny być znacznie łatwiejsze. Po prostu nie mogłem przekręcić dokumentacji w działający przykład.Factory Girl: Automatyczne przypisywanie obiektów macierzystych

Przyjmijmy, mam następujące modele:

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 

Co chcę zrobić to:

team = Factory.build(:team_with_players) 

i go zbudować grono graczy dla mnie. Próbowałem to:

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 

Ale to nie na odcinku :team=>t, ponieważ t naprawdę nie jest Team, to Factory::Proxy::Builder. I mieć, aby mieć drużynę przypisaną do gracza.

W niektórych przypadkach chcę zbudować League i zrobić to samo, tworząc wiele zespołów z wieloma graczami.

Czego mi brakuje?

+0

Właśnie wpadł dokładnie tym samym problemem (ten sam błąd) i rozejrzała się dookoła i nie znalazłem rozwiązania. –

Odpowiedz

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

Jak o tym:

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

Ale jeśli gracz potrzebuje odniesienia do zespołu, skąd je otrzymuję? W tym przykładzie "zespół" odnosi się do obiektu fabrycznego ... –

+0

Mam coś podobnego do tego: team.association (: player,: team_id => team) wydaje się dziwne, ale działa dla mnie. – Priit

+1

Kiedy to robię, narzeka: "Oczekiwany zespół, ale był FactoryGirl :: Proxy" lub coś w tym stylu. –