13

我在 Rails 控制台中使用 Model.delete_all 删除表,但我注意到 ID 号不会重置,它们只是从它停止的地方开始。如何删除表并使 id 从 1 开始?

这实际上没什么大不了的,我只是好奇,认为这样会更干净。谢谢!

4

7 回答 7

11

要仅删除一个表(带有回调)并从 1 开始获取 ID,rails 中没有直接的方法可以做到这一点。

你可以做

1)Model.destroy_all

2)ActiveRecord::Base.connection.execute("TRUNCATE table_name")

如果你需要的话,它将处理你想要的所有东西,对于一个表

于 2014-03-31T08:55:24.967 回答
7

大多数数据库都有一个序列的概念,它在使用时会自动递增。ActiveRecord 使用底层数据库序列来创建主键。这个 gem ( https://github.com/splendeo/activerecord-reset-pk-sequence ) 可能会根据您的数据库帮助您重置它。

于 2013-02-28T20:09:15.057 回答
6

如果您使用 postgresql,则可以执行此代码

ActiveRecord::Base.connection.reset_pk_sequence!(Model.table_name)

Model.destroy_all

于 2017-10-24T07:25:46.920 回答
5

最好和最简单的方法:

ActiveRecord::Base.connection.reset_pk_sequence!('table_name')

Ps:不要忘记table_name后面的's'

于 2018-12-18T11:47:47.053 回答
3

如果您只需要重置 id:

ActiveRecord::Base.connection.execute('ALTER TABLE table_name AUTO_INCREMENT = 1')
于 2014-11-05T10:27:15.430 回答
1

这取决于数据库。在您的应用程序中,您不应依赖 ID 以 1 开头并按顺序排列的事实,甚至不应该总是增加新记录。如果你想要一个新的数据库,你总是可以做rake db:drop, then rake db:create.

于 2013-02-28T20:09:38.067 回答
0

一个班轮

rake db:drop && rake db:create && rake db:migrate

回到工作

于 2013-02-28T20:12:22.170 回答