删除数据库表中的所有logging
如何在Ruby on Rails应用程序中删除其中一个数据库表中的所有logging?
如果你正在寻找一个没有SQL的方法,你应该可以使用delete_all。
Post.delete_all
或与一个标准
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
在这里看到更多的信息。
logging被删除而不加载它们,这使得它非常快,但会破坏function,如计数器caching,这取决于轨道代码删除时执行。
通过SQL删除
Item.delete_all # accepts optional conditions
要删除通过调用每个模型的销毁方法(昂贵,但确保callback被称为)
Item.destroy_all # accepts optional conditions
所有在这里
如果你想完全清空数据库,而不是只删除一个或多个模型,你可以这样做:
rake db:purge
你也可以在testing数据库上做到这一点
rake db:test:purge
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
。
请注意,我们确保不清除SchemaMigration表。
如果你的模型被称为BlogPost,它将是:
BlogPost.all.map(&:destroy)