我像这样创建一个新记录:
truck = Truck.create(:name=>name, :user_id=>2)
我的数据库目前有数千个卡车实体,但我将 id 分配给了其中几个实体,以某种方式留下了一些可用的 id。所以发生的事情是 rails 创建了 id = 150 的项目,它工作正常。但随后它尝试创建一个项目并将其分配 id = 151,但该 id 可能已经存在,所以我看到了这个错误:
ActiveRecord::RecordNotUnique (PG::Error: ERROR: duplicate key value violates unique constraint "companies_pkey"
DETAIL: Key (id)=(151) already exists.
下次我运行该操作时,它会简单地分配 id 152,如果尚未采用该值,它将正常工作。如何让 rails 在分配 ID 之前检查它是否已经存在?
谢谢!
编辑
Truck id 是被复制的内容。用户已经存在并且在这种情况下是一个常量。这实际上是我必须处理的遗留问题。一种选择是,这次在 let rails auto assign each id 时重新创建表。我开始认为这可能是最好的选择,因为我还有其他一些问题,但是这样做的迁移会非常复杂,因为 Truck 是许多其他表中的外键。是否有一种简单的方法可以让 rails 创建一个新表,其中包含已存储在 Truck 下的相同数据、自动分配的 ID 并维护所有现有关系?