我有一个测试数据库,现在里面充满了垃圾数据。我已经在Rails控制台中执行了一些Table.destroy_all命令,删除了所有记录和依赖关系,这很棒。但是,我想要截断所有内容,使ID等重新从1开始。在Rails 3中有没有这样的方法?
我有一个测试数据库,现在里面充满了垃圾数据。我已经在Rails控制台中执行了一些Table.destroy_all命令,删除了所有记录和依赖关系,这很棒。但是,我想要截断所有内容,使ID等重新从1开始。在Rails 3中有没有这样的方法?
ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.tables.each do |table|
next if table == 'schema_migrations'
case ActiveRecord::Base.connection.adapter_name.downcase.to_sym
when :mysql2 , :postgresql
ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
ActiveRecord::Base.connection.execute("TRUNCATE #{table} RESTART IDENTITY")
when :sqlite
ActiveRecord::Base.connection.execute("DELETE FROM #{table}")
end
end
我知道有点晚了
要求在控制台中执行此操作:
2.1.2 :001 > Post.all.each do |post|
2.1.2 :002 > post.destroy!
2.1.2 :003 > end
同样有效...
本质上,这个循环遍历所有的帖子并将它们销毁。但它不会改变您的自增值...
相同的逻辑也适用于Rails 3(尽管我正在使用Rails 4)
each
,使用find_each
。它确保你不会在一次查询中获取数十亿条记录。Post.delete_all
即可。