rails对象id存在吗?

时间:2016-06-20 06:12:12

标签: ruby-on-rails postgresql

我的 Rails 应用程序中有一个Article表,但在此表中,有数百条记录正在转移到旧网站,所以表格如下所示: / p>

  

1 ... 700 (现在使用索引)... ... 1001 ... 3000 (旧文章ID) )

如果我生成新文章,文章ID将为701

但在处理@article.save之前,我无法检查文章ID是否已被使用。

临时解决方案是:显示ID列,当用户生成结果错误时,他们会输入id+1并尝试保存。

如何自动检查此状态?

条件是:

如果已使用文章ID,请检查id + 1,直到找到可以使用的ID?

2 个答案:

答案 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