我是Heroku免费版上具有Postgresql 9.6.9的Rails 5.1。
我最近在使用带有csv文件的rake任务来尝试创建几个批处理或记录。然后,我想测试前端使用情况,只是验证我的表单是否像开发中那样正常工作。
但是,当我使用表格添加新记录时,却不断出现500错误。当我检查Heroku日志时,出现此错误。
ActiveRecord :: RecordNotUnique(PG :: UniqueViolation:错误:重复的键值违反了唯一约束“ games_pkey”
它将列出要使用的ID,这是我通过rake任务和csv文件导入记录时使用的较低ID。
我通过不断尝试使用我的表单来创建记录来确认这确实是问题,大约20次尝试之后,记录终于通过了,并到达了正确的下一个ID。
我不确定这是否是由Postgres或Rails引起的错误。当我开始使用rake任务和csv文件时,它显然已启动。 csv文件确实具有ID的属性,该属性已用于轻松检查以更新或创建新文件,但这也许是我的原因。
关于如何防止此错误的任何建议都非常有用,因为我还以更大的批量上传了其他型号的其他csv文件。我想继续这样做,但前提是我必须避免出现此错误,以便在可能的情况下以我拥有的简单格式添加一两个。
谢谢您的帮助。
这是可能引起问题的复杂任务代码:
CSV.foreach(filename, {col_sep: ";", headers: true}) do |row|
game_hash = row.to_h
game = Game.find_by(id: game_hash["id"])
if(!game)
game = Game.create(game_hash)
else
game.update(game_hash)
end
end
答案 0 :(得分:0)
如果该问题是由于- kind: ExampleKind
properties:
- name: PropertyA
direction: asc
- name: PropertyB
direction: asc
- kind: ExampleKind
properties:
- name: PropertyC
direction: asc
- name: PropertyD
direction: asc
中的id
引起的,那么我将尝试将其删除为:
game_hash
这应该在创建新游戏之前删除CSV.foreach(filename, {col_sep: ";", headers: true}) do |row|
game_hash = row.to_h
game = Game.find_by(id: game_hash["id"])
#remove the id from the hash
game_hash.delete :id
if(!game)
game = Game.create(game_hash)
else
game.update(game_hash)
end
end
。