【发布时间】:2010-01-30 04:26:58
【问题描述】:
假设我有一个 Post 模型。当我删除最后一个帖子“帖子 24”时,我希望下一个帖子采用帖子 24 而不是帖子 25 的 ID。
我想在视图中显示 id 并且我不想丢失数字。我该怎么做?
感谢您的帮助。
【问题讨论】:
-
注意:在询问 SQL 答案时,说明您使用的是什么类型(mysql、sqlserver、oracle 等)会很有帮助
标签: sql ruby-on-rails
假设我有一个 Post 模型。当我删除最后一个帖子“帖子 24”时,我希望下一个帖子采用帖子 24 而不是帖子 25 的 ID。
我想在视图中显示 id 并且我不想丢失数字。我该怎么做?
感谢您的帮助。
【问题讨论】:
标签: sql ruby-on-rails
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 列将自动跟踪自身,没有序列间隙。如果您愿意,它甚至会为您提供一些方便的重新订购方法。
【讨论】:
相反,您可以让 SQL 自己执行此操作:
SELECT rownum AS id, [whatever other columns you want]
FROM posts_table
WHERE [conditions]
ORDER BY [ordering conditions]
这将为每一行添加数字,而不会像您说的那样跳过任何内容。
注意:我使用 Oracle。我不知道这个确切的代码是否适用于其他风格。
【讨论】: