我有一个属于participant
的presentation
,而又属于user
。
我的工厂女孩类定义是:
factory :presentation do
sequence(:title) { |n| "Some topic nr #{n}" }
association :participant
end
factory :participant do
name "John Doe"
association :user, :guest
end
factory :user do
trait :admin do
ident 1000
roles ["admin"]
end
trait :guest do
ident 9000
roles ["guest"]
end
end
当我运行我的spec
:FactoryGirl.create_list(:presentation, 3)
时,我收到错误,用户已经被占用,因为ident
值必须是唯一的。
问题是,我不想为每个演示文稿创建新对象。它应该属于同一个participant
对象(因此属于同一个user
对象(。
所以我想要的是:创建属于同一参与者的 3 个演示文稿。
构建后可以使用关联:
factory :presentation do
sequence(:title) { |n| "Some topic nr #{n}" }
after(:build) do |s|
unless Participant.count == 0
s.participant = Participant.first
end
s.participant ||= create(:participant)
end
end
您可以先创建一个participant
,
@participant = FactoryGirl.create(:participant)
然后,在创建演示文稿时分配该participant
,
@presentations = FactoryGirl.create_list(:presentation, 3, participant: @participant)