【发布时间】:2018-08-06 00:19:57
【问题描述】:
我是在 Heroku 免费层上使用 Postgresql 9.6.9 的 Rails 5.1。
我最近使用 csv 文件的 rake 任务来尝试创建几个批次或记录。然后我想测试前端的使用,并验证我的表单是否像在开发中那样工作。
但是,当我使用表单添加新记录时,我不断收到 500 错误。当我检查我的 Heroku 日志时,我收到了这个错误。
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: 重复键值违反唯一约束“games_pkey”
它会列出它尝试使用的 id,这将是我通过 rake 任务和 csv 文件导入记录时使用的较低 id。
我通过不断尝试使用我的表单创建记录来确认这确实是问题所在,在大约 20 次尝试后终于通过了,它得到了正确的下一个 id。
我不确定这是由 Postgres 还是 Rails 引起的错误。它显然是在我开始使用 rake 任务和 csv 文件时开始的。 csv 文件确实有一个 ID 属性,用于轻松检查以更新或创建新文件,但也许这是我的原因。
任何有关如何防止此错误的建议都会很棒,因为我还以更大的批次为其他模型上传了其他 csv 文件。我想继续这样做,但前提是我可以避免这个错误,以便我可以通过我拥有的简单表格添加一两个。
感谢您的帮助。
这是可能导致问题的 rask 任务代码:
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
【问题讨论】:
标签: ruby-on-rails postgresql activerecord ruby-on-rails-5 rake-task