gpt4 book ai didi

ruby-on-rails - 与工厂机器人创建/构建冲突的种子数据库键值

转载 作者:行者123 更新时间:2023-12-05 03:05:55 25 4
gpt4 key购买 nike

我们的 Rails 数据库预先植入了一些静态模型的数据。例如,我们有一个通过 db/seeds.rb 填充/更新的 DocumentType 模型。用户无法修改此模型。

然而,这似乎不能很好地与 factory_bot 配合使用;当我尝试:

create(:document_type)

我收到一条错误信息:

ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "document_types_pkey" DETAIL: Key (id)=(1) already exists.

每次我运行测试时,都会发生此错误,但尝试保存的 key (id) 会递增。然后,最终,当测试超出种子数据的范围时,测试就会通过。

我不明白的是,为什么 factory_bot 实际上是在设置 id 值,而不是让数据库在保存记录时分配它。

文档类型工厂

FactoryBot.define do
factory :document_type do
label 'Alien Spacecraft License'
description 'It should be obvious, I think'
created_at { Time.now - 30.days }
updated_at { Time.now - 30.days }
end
end

尝试修复

我尝试的是创建一个 fixture 文件,它完全模仿 seeds.rb 文件中的内容——当我这样做时,factory_bot 遵循 fixture 中设置的 id 值。但这会导致很多重复工作(我必须使种子与固定装置保持同步)。

我已经研究过使用固定装置来填充数据库,但不幸的是,在我们的例子中,我们在种子数据中使用硬编码 ID 来插入/更新……所以固定装置似乎不是一个好的播种选项.

如果有人有任何想法,我很好奇。谢谢!

最佳答案

也许尝试对您的 document_type 工厂 ID 进行排序,使其在种子的最后一个 ID 之后开始递增

FactoryBot.define do
factory :document_type do
sequence(:id) {|n| n + 30 } #i.e n + last id known in seed
end
end

关于ruby-on-rails - 与工厂机器人创建/构建冲突的种子数据库键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com