Хорошо, мне кажется, я понимаю, о чем вы сейчас спрашиваете.Нечто подобное должно работать (не проверено, но я сделал нечто подобное в другом проекте):
Factory.define :person do |f|
f.first_name 'John'
f.last_name 'Doe'
end
Factory.define :email do |f|
end
# This is optional for isolating association testing; if you want this
# everywhere, add the +after_build+ block to the :person factory definition
Factory.define :person_with_email, :parent => :person do |f|
f.after_build do |p|
p.emails << Factory(:email, :email => "#{p.first_name}.#{p.last_name}@gmail.com")
# OR
# Factory(:email, :person => p, :email => "#{p.first_name}.#{p.last_name}@gmail.com")
end
end
Как уже отмечалось, использование третьей отдельной фабрики необязательно.В моем случае я не всегда хотел генерировать связь для каждого теста, поэтому я создал отдельную фабрику, которую использовал только в нескольких конкретных тестах.