如何删除Ruby on Rails应用程序中某个数据库表中的所有记录?
答案 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)