我有一个测试数据库,现在里面充满了垃圾数据。我已经在Rails控制台中执行了一些Table.destroy_all命令,删除了所有记录和依赖关系,这很棒。但是,我想要截断所有内容,使ID等重新从1开始。在Rails 3中有没有这样的方法?
我有一个测试数据库,现在里面充满了垃圾数据。我已经在Rails控制台中执行了一些Table.destroy_all命令,删除了所有记录和依赖关系,这很棒。但是,我想要截断所有内容,使ID等重新从1开始。在Rails 3中有没有这样的方法?
如果您需要重新创建整个数据库,则接受的答案有效。
要丢弃单个表(带有回调)并使ID从1开始:
Model.destroy_all # Only necessary if you want to trigger callbacks.
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")
如果你正在使用Sqlite,它不支持truncate,所以请按照以下步骤操作:
Model.destroy_all # Only necessary if you want to trigger callbacks.
ActiveRecord::Base.connection.execute("Delete from #{table_name}")
ActiveRecord::Base.connection.execute("DELETE FROM SQLITE_SEQUENCE WHERE name='#{table_name}'")
Model.connection.truncate(Model.table_name)
这个方法对我管用 -
ActiveRecord::Base.connection.execute("TRUNCATE table_name")
ActiveRecord::Base.connection.truncate_tables([:table1_name, :table2_name])
ActiveRecord::Base.connection.truncate_tables(*[:table1_name, :table2_name])
或者 ActiveRecord::Base.connection.truncate_tables(:table1_name, :table2_name)
。 - new2cppMyModel.connection_pool.with_connection { |c| c.truncate(MyModel.table_name) }
rake db:rollback STEP=3 RAILS_ENV=test
命令。其中的3代表你在db/migrate目录下有多少个迁移文件。举个例子:如果我有三个迁移文件,那么这个命令会回滚最近的三个迁移。db/migrate
20140121065542_create_users.rb
20140121065710_create_profiles.rb
20140121065757_create_articles.rb
20140121065900_create_comments.rb
20140121065929_create_categories.rb
我总共有5个迁移需要删除。如果我运行 rake db:rollback STEP=5 RAILS_ENV=test
,所有表格都将从我的测试数据库中删除。如果我去掉RAILS_ENV=test,那么所有环境(生产、测试、开发)的表格都将被删除,并且它还会清除db/schema.rb文件中的迁移数据。
rake db:reset
命令将执行rake db:drop db:setup
命令。换句话说,它会删除数据库并重新设置数据库。
只需在下一次测试运行时重新构建数据库(在删除数据库后,这将自动发生)。
rake db:drop RAILS_ENV=test
您可以在 Rails 控制台中使用 ModelName.delete_all
。
db:truncate_all
。请参阅 文档。ActiveRecord::Tasks::DatabaseTasks.truncate_all
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
对于PostgreSQL:ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")
- Sergio Gonzalezc = ActiveRecord::Base.connection; c.execute("TRUNCATE #{c.quote_table_name(Model.table_name)}")
。必要时添加RESTART IDENTITY
/CASCADE
。 - x-yuri