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

Jus*_*zer 124 ruby database ruby-on-rails ruby-on-rails-3

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

Hak*_*onB 237

如果您正在寻找一种没有SQL的方法,您应该可以使用delete_all.

Post.delete_all
Run Code Online (Sandbox Code Playgroud)

或者有标准

Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见此处

删除记录时不先加载它们,这会使它非常快,但会破坏计数器缓存等功能,这取决于删除时要执行的rails代码.

  • 值得注意的是,如果你有以下关联:dependent =>:destroy,或者删除后需要清理的任何东西,你可能会想要Post.destroy_all - 尽管速度要慢得多.请参阅http://apidock.com/rails/ActiveRecord/Base/destroy_all/class (13认同)

leb*_*eze 28

要通过SQL删除

Item.delete_all # accepts optional conditions

通过调用每个模型的destroy方法来删除(昂贵但确保调用回调)

Item.destroy_all # accepts optional conditions

在这里


Ken*_*Dev 21

如果你想完全清空数据库而不只是删除附加到它上面的模型,你可以这样做:

rake db:purge
Run Code Online (Sandbox Code Playgroud)

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

rake db:test:purge
Run Code Online (Sandbox Code Playgroud)


dfa*_*ken 5

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

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