Deleting all records in a database table

How do I delete all records in one of my database tables in a Ruby on Rails app?


If you are looking for a way to it without SQL you should be able to use delete_all.


or with a criteria

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

See here for more information.

The records are deleted without loading them first which makes it very fast but will break functionality like counter cache that depends on rails code to be executed upon deletion.

To delete via SQL

Item.delete_all # accepts optional conditions

To delete by calling each model's destroy method (expensive but ensures callbacks are called)

Item.destroy_all # accepts optional conditions

All here

if you want to completely empty the database and not just delete a model or models attached to it you can do:

rake db:purge

you can also do it on the test database

rake db:test:purge

If you mean delete every instance of all models, I would use
  .map{|name| name.constantize if Object.const_defined?(name)}


More recent answer in the case you want to delete every entries in every tables:

def reset
    ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration  }

More information about the eager_load here.

After calling it, we can access to all of the descendants of ActiveRecord::Base and we can apply a delete_all on all the models.

Note that we make sure not to clear the SchemaMigration table.

If your model is called BlogPost, it would be:

Need Your Help

Where can I find the Tomcat 7 installation folder on Linux AMI in Elastic Beanstalk?

linux tomcat elastic-beanstalk

I have a elastic beanstalk linux-tomcat ami instance with the sample application installed and working off the public dns. I'm able to ssh into the

@OrderColumn generates a request to update the primary key

java hibernate jpa-2.0

I use a list. The list is comprised of a compound primary key which is also used for sorting the list.