说我有一个Post模型。当我删除上一篇文章“Post 24”时,我希望下一篇文章记录Post 24而不是Post 25。
我想在视图中显示id,我不想丢失数字。我该怎么做?
感谢您的帮助。
答案 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。我不知道这个确切的代码是否适用于其他版本。