Model.delete_all并让ids从1开始?

And*_*ndy 8 ruby-on-rails ruby-on-rails-3

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

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

Sak*_*eer 9

要只删除一个表(带有回调)并从1开始获取ID,在rails中没有直接的方法来执行它.

你可以做

1) Model.destroy_all

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

如果你需要的话,它可以处理你想要的所有东西


hwa*_*ins 7

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


Gre*_*ick 6

最好、最简单的方法:

ActiveRecord::Base.connection.reset_pk_sequence!('table_name')
Run Code Online (Sandbox Code Playgroud)

PS:不要忘记表名后面的“s”


bun*_*cis 5

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

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