【发布时间】:2014-11-06 22:45:06
【问题描述】:
我遇到了同样的问题post。但我正在使用 Rails,不知道如何在 activerecord 中解决此问题。
我正在使用 seed.rb 插入一些数据:
device_platforms = DevicePlatform.create([{id: 1, name: 'Android'}, {id: 2, name: 'IOS'}, {id: 3, name: 'Windows Phone'}])
当我插入另一个 DevicePlatform 时,我得到了这个异常:
Failure/Error: @device_platform = FactoryGirl.create(:device_platform)
ActiveRecord::RecordNotUnique:
PG::UniqueViolation: ERRO: duplicar valor da chave viola a restrição de unicidade "device_platforms_pkey"
DETAIL: Chave (id)=(2) já existe.
: INSERT INTO "device_platforms" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) RETURNING "id"
消息是葡萄牙语,它表示具有该 ID 的行已经存在。
谢谢。
【问题讨论】:
-
为什么要指定 id?
-
不要在种子中包含
ids。如果您必须在种子中包含ids,那么您必须在添加种子后在另一个问题中使用connection.executeSQL。 -
感谢您提供错误的确切文本。如果可以的话,我会 +100。
-
@muistooshort 您认为在种子文件中包含 id 是一种不好的做法?
-
依赖于
ids 是任何特别的东西是一种不好的做法。如果需要,您可以这样做,但您需要运行一些 SQL 来修补用于提供id值的序列。
标签: ruby-on-rails postgresql activerecord