Я просто вхожу в Девочку Фабрики, и я сталкиваюсь с трудностью, что я уверен, должно быть намного легче. Я просто не мог скрутить документацию в рабочий пример.
Предположите, что у меня есть следующие модели:
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
не действительно a Team
, это - a Factory::Proxy::Builder
. Мне нужно было присвоить команду плееру.
В некоторых случаях я хочу создать a League
и имейте его, делают подобная вещь, создавая несколько подходит к нескольким плеерам.
Что я пропускаю?
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
Как насчет этого:
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