9

Factory Girl を始めたばかりで、もっと簡単にできると確信している問題に直面しています。ドキュメントを実際の例にひねることができませんでした。

次のモデルがあるとします。

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実際には ではなくTeamFactory::Proxy::Builder. プレーヤーにチームを割り当てる必要があります

場合によってはLeague、複数のプレーヤーで複数のチームを作成して、同様のことを行うようにします。

私は何が欠けていますか?

4

2 に答える 2

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
于 2010-03-16T23:28:27.430 に答える
2

How about this:

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
于 2010-03-02T21:18:51.480 に答える