删除数据库表中的所有记录

如何在 Ruby on Rails 应用程序中删除数据库表中的所有记录?

119156 次浏览

如果你的模型叫做 BlogPost,那么它应该是:

BlogPost.all.map(&:destroy)

如果您正在寻找一种不使用 SQL 的方法,那么您应该能够使用 delete _ all。

Post.delete_all

或者有一个标准

Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"

有关更多信息,请参见 给你

这些记录在没有首先加载的情况下被删除,这使得它非常快,但是会破坏像计数器缓存这样的功能,计数器缓存依赖于删除后要执行的 Rails 代码。

如果你想完全清空数据库,而不是仅仅删除一个或多个模型,你可以这样做:

rake db:purge

您也可以在测试数据库中执行此操作

rake db:test:purge

通过 SQL 删除

Item.delete_all # accepts optional conditions

通过调用每个模型的销毁方法删除(代价高昂,但确保调用了回调)

Item.destroy_all # accepts optional conditions

所有 给你

BlogPost.find_each(&:destroy)

如果你的意思是删除所有模型的每个实例,我会使用

ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)

如果您想删除每个表中的每个条目,最近的答案是:

def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration  }
end

更多关于 eager_load 给你的信息。

在调用它之后,我们可以访问 ActiveRecord::Base的所有后代,并且可以在所有模型上应用 delete_all

请注意,我们确保不清除 SchemaImmigration 表。

如果您有带关系的模型,则需要销毁相关的模型。

实现这一目标的最快方法是:-

  1. 要从表中删除所有数据
Post.delete_all
  1. 想要从表中删除特定的数据,那么正确的方法是
Post.where(YOUR CONDITIONS).delete_all
# this above solution is working in Rails 5.2.1, delete_all don't expect any parameter
# you can let me know if this works in different versions.


# In the older version, you might need to do something like this:-
Post.delete_all "Your Conditions"