即使提供了记录,FactoryBot 也会创建记录
FactoryBot creates records even when a record is provided
我有时在开发中使用factorybot来创建记录。但是,它创建了一堆我没有预料到的额外数据。
我有两个工厂:
FactoryBot.define do
factory :user do
first_name { Faker::Name.first_name }
last_name { Faker::Name.last_name }
email { "#{first_name}.#{last_name}@example.com" }
end
factory :post do
user { create(:user) }
title { Faker::Lorem.sentence }
end
end
如果我在 rails 控制台中 运行 FactoryBot.create(:post)
,它将使用新用户创建一个新的 post。没想到的是,如果我做FactoryBot.create(:post, user: User.first)
,它会创建一个与第一个用户关联的post,但是仍然创建一个新记录。所以,我明白了:
irb(main):001:0> User.count
=> 1
irb(main:002:0> FactoryBot.create(:post, user: User.first)
=> #<Post id: 1, title: 'Lorem Ipsum', host_id: 1>
irb(main:003:0> User.count
=> 2
一切正常,它只是创建了一个未附加到任何内容的新用户记录。有没有办法阻止这种情况发生?
您不需要告诉 FactoryBot 创建(:用户)。删除它即可。
factory :post do
user
title { Faker::Lorem.sentence }
end
我有时在开发中使用factorybot来创建记录。但是,它创建了一堆我没有预料到的额外数据。
我有两个工厂:
FactoryBot.define do
factory :user do
first_name { Faker::Name.first_name }
last_name { Faker::Name.last_name }
email { "#{first_name}.#{last_name}@example.com" }
end
factory :post do
user { create(:user) }
title { Faker::Lorem.sentence }
end
end
如果我在 rails 控制台中 运行 FactoryBot.create(:post)
,它将使用新用户创建一个新的 post。没想到的是,如果我做FactoryBot.create(:post, user: User.first)
,它会创建一个与第一个用户关联的post,但是仍然创建一个新记录。所以,我明白了:
irb(main):001:0> User.count
=> 1
irb(main:002:0> FactoryBot.create(:post, user: User.first)
=> #<Post id: 1, title: 'Lorem Ipsum', host_id: 1>
irb(main:003:0> User.count
=> 2
一切正常,它只是创建了一个未附加到任何内容的新用户记录。有没有办法阻止这种情况发生?
您不需要告诉 FactoryBot 创建(:用户)。删除它即可。
factory :post do
user
title { Faker::Lorem.sentence }
end