我的 Rails 应用程序中有一个Article
表,但在此表中,有数百条记录正在转移到旧网站,所以表格如下所示: / p>
1 ... 700 (现在使用索引)... 空 ... 1001 ... 3000 (旧文章ID) )
如果我生成新文章,文章ID将为701
。
但在处理@article.save
之前,我无法检查文章ID是否已被使用。
临时解决方案是:显示ID
列,当用户生成结果错误时,他们会输入id+1
并尝试保存。
如何自动检查此状态?
条件是:
如果已使用文章ID,请检查id + 1,直到找到可以使用的ID?
答案 0 :(得分:1)
Postgres使用序列为您的id列选择下一个值。听起来你的导入过程没有更新序列。您可以使用类似的内容更新序列的值
select setval('articles_id_seq', (SELECT MAX(id) FROM articles));
您可以使用\d articles
检查psql中序列的名称。
答案 1 :(得分:0)
如果我是你,我会创建并立即删除所有记录,直到您已经从旧应用程序硬编码的ID。通过这种方式,您将从旧应用程序停止的位置继续使用新的ID。我认为没有理由让你的代码比它需要的更复杂,因为这个问题实际上是一次性事件。
rails c
(700..3000).each do
a = Article.create() rescue nil #when you hit the ids that are already in the database
puts a.try(:id)
a.delete
end