2010-03-02 58 views
9

我剛剛進入工廠女孩,我遇到了一個困難,我敢肯定應該更容易。我只是無法將文檔轉換成一個工作示例。工廠女孩:自動分配父對象

假設我有以下型號:

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 

我想要做的是這樣的:

team = Factory.build(:team_with_players) 

,並把它打造了一堆的球員對我來說。我嘗試這樣做:

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 

但這未能對:team=>t部分,因爲t是不是一個真正的Team,這是一個Factory::Proxy::Builder。我有有一個隊分配給一個球員。

在某些情況下,我想建立一個League並讓它做類似的事情,創建多個球員的多個球隊。

我錯過了什麼?

+0

我只是碰到了這個相同問題(同樣的錯誤)和所有環顧四周,並沒有發現一個解決方案。 –

回答

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

如何:

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

但是如果玩家需要參照團隊,我會在哪裏得到?在這個例子中,「團隊」指的是一個工廠對象... –

+0

我有類似的東西:team.association(:player,:team_id => team)似乎很奇怪,但對我很有用。 – Priit

+1

當我這樣做時,它抱怨:「預期的團隊,但是FactoryGirl ::代理」或類似的東西。 –