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

时间:2011-03-16 07:39:57

标签: ruby-on-rails ruby database ruby-on-rails-3

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

7 个答案:

答案 0 :(得分:230)

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

Post.delete_all

或使用标准

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

有关详细信息,请参阅here

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

答案 1 :(得分:27)

通过SQL删除

Item.delete_all # accepts optional conditions

通过调用每个模型的destroy方法来删除(代价很高但确保调用回调)

Item.destroy_all # accepts optional conditions

所有here

答案 2 :(得分:21)

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

rake db:purge

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

rake db:test:purge

答案 3 :(得分:5)

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

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

答案 4 :(得分:4)

BlogPost.find_each(&:destroy)

答案 5 :(得分:2)

在您要删除每个表中的每个条目的情况下,最近的答案是:

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

有关eager_load here

的更多信息

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

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

答案 6 :(得分:1)

如果您的模型名为BlogPost,则为:

BlogPost.all.map(&:destroy)