Rails FactoryGirl 关联与唯一验证冲突
Rails FactoryGirl association conflicts with unique validation
我有一个 presentation
,它属于 participant
,而 participant
又属于 user
。
我的 FactoryGirl class 定义是:
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)
我有一个 presentation
,它属于 participant
,而 participant
又属于 user
。
我的 FactoryGirl class 定义是:
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)