删除数据库表中的所有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)