如何在rails中重置单个表?

yuk*_*kas 83 ruby-on-rails

我希望主键值再次从1开始.

Fla*_*viu 179

很多人(像我一样)来这里找到如何删除表中的所有数据.干得好:

$ rails console

> ModelName.delete_all
Run Code Online (Sandbox Code Playgroud)

要么

> ModelName.destroy_all
Run Code Online (Sandbox Code Playgroud)

destroy_all检查依赖关系和回调,并且需要更长的时间.delete_all是一个直接的SQL查询.

更多信息:http://apidock.com/rails/ActiveRecord/Base/delete_all/class

  • 此解决方案重置表条目,但不重置主键. (13认同)
  • 是的,这很棒 - 但我想重置索引!delete_all或destroy_all都没有将索引重置为1. (4认同)

Mel*_*emi 42

我一直在使用rails console中的以下内容删除表中的所有内容,然后重置索引计数器(Ruby 2和Rails 4):

> ModelName.delete_all
> ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说非常好用,但是一个小细节是你的reset命令中的`model_name`需要复数,比如表的实际名称而不是模型的单数名称. (3认同)

Ric*_*ick 26

要在SQLite中重置索引/主键,只需键入:

$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
Run Code Online (Sandbox Code Playgroud)


van*_*san 18

@ khelll的链接很有帮助.要截断一个表的命令是:

ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
Run Code Online (Sandbox Code Playgroud)

  • 似乎不适用于Rails 4 (2认同)

Bor*_*aMa 12

从Rails 4.2开始,您可以truncate直接在ActiveRecord连接上使用:

ActiveRecord::Base.connection.truncate(:table_name)
Run Code Online (Sandbox Code Playgroud)

这将擦除所有数据重置表中的自动增量计数器.在MySQL和Postgres的作品, SQLite中工作.


kik*_*ito 10

添加gem 'database_cleaner'到您的Gemfile,运行$ bundle install,然后:

> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
Run Code Online (Sandbox Code Playgroud)

您可以指定更多表:

> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
Run Code Online (Sandbox Code Playgroud)

如果保留最后一个参数,它将截断整个数据库:

> DatabaseCleaner.clean_with(:truncation) # your database is truncated
Run Code Online (Sandbox Code Playgroud)


skp*_*rin 6

我正在使用Rails 4.2.0和Sqlite3

这对我有用(从上面的所有内容中得到一点):

$ rails c
> ModelName.delete_all
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
Run Code Online (Sandbox Code Playgroud)

然后我能够将新记录添加到我的表中,索引从1开始