Model.delete_all并让ids从1开始?

时间:2013-02-28 20:03:55

标签: ruby-on-rails ruby-on-rails-3

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

这实际上并不是什么大问题,我只是好奇并且认为这样更清洁。谢谢!

7 个答案:

答案 0 :(得分:9)

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

你可以做到

1)Model.destroy_all

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

可以处理您想要的所有内容,对于单个表格,如果您需要的话

答案 1 :(得分:7)

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

答案 2 :(得分:3)

如果您只需要重置ID:

ActiveRecord::Base.connection.execute('ALTER TABLE table_name AUTO_INCREMENT = 1')

答案 3 :(得分:2)

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

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

之后

Model.destroy_all

答案 4 :(得分:1)

这取决于数据库。在您的应用程序中,您不应该依赖于ID以1开头并按顺序进行的事实,或者甚至总是为新记录增加。 如果您想要一个全新的数据库,您可以随时rake db:drop,然后rake db:create

答案 5 :(得分:0)

最佳简便的方法:

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

Ps:请不要忘记table_name之后的's'

答案 6 :(得分:-1)

一个班轮

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

重新开始营业