如何在Rails中重用已删除的模型ID号?

时间:2010-01-30 04:26:58

标签: sql ruby-on-rails

说我有一个Post模型。当我删除上一篇文章“Post 24”时,我希望下一篇文章记录Post 24而不是Post 25。

我想在视图中显示id,我不想丢失数字。我该怎么做?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

id的目的只不过是内部标识符。它根本不应公开使用。这不是Rails的事情,而是数据库问题。 MySQL不会回收id,因为它可能会导致你的应用程序出现非常严重的并发症。如果删除了一条记录,那么它的id将被永久地放置,以便将来的记录不会被误认为是。

然而,有一种方法可以做你想要的。我相信你想要一个position整数列。将其添加到您的模型/表格中,然后安装acts_as_list plugin

按常规方式安装:

script/plugin install git://github.com/rails/acts_as_list.git

然后将“钩子”添加到您的模型中:

class Post < ActiveRecord::Base
  acts_as_list
end

现在,帖子模型的position列会自动跟踪,没有序列间隔。如果您愿意,它甚至会为您提供一些方便的重新订购方法。

答案 1 :(得分:0)

相反,您可以让SQL自己执行此操作:

SELECT rownum AS id, [whatever other columns you want]
FROM posts_table
WHERE [conditions]
ORDER BY [ordering conditions]

这将为每一行添加数字,而不会像你说的那样跳过任何一行。

注意:我使用的是Oracle。我不知道这个确切的代码是否适用于其他版本。

相关问题