Девочка фабрики: Автоматически присваивающиеся родительские объекты

Я просто вхожу в Девочку Фабрики, и я сталкиваюсь с трудностью, что я уверен, должно быть намного легче. Я просто не мог скрутить документацию в рабочий пример.

Предположите, что у меня есть следующие модели:

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 и имейте его, делают подобная вещь, создавая несколько подходит к нескольким плеерам.

Что я пропускаю?

9
задан Daniel Beardsley 6 March 2010 в 00:21
поделиться

2 ответа

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
5
ответ дан 4 December 2019 в 23:06
поделиться

Как насчет этого:

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
2
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: