Search code examples
sqlruby-on-rails-3postgresqlrake

Rake task to truncate all tables in Rails 3


I would like to have a rake task for truncating all the tables. I have found one on the internet, but it is supposed only for Rails 2 and does not work for Rails 3 (problem is in getting a database connection).

rake db:reset is not an option, because I am using PostgreSQL and it also drops the user. Therefore migration fails. I only want to clear the data.

Do you guys have somehting for me?


Solution

  • I've found this via google, and then I got a much simpler solution than the one approved, so here it is: Use the database_cleaner gem. Here're the steps.

    In your Gemfile (execute bundle after modifying):

    gem 'database_cleaner' # you might want to limit this to the dev and staging group
    

    With that gem in place, the statement DatabaseCleaner.clean_with :truncation will truncate the database. Adding it to a rake task is trivial:

    # tasks/db/clean.rake
    
    namespace :db do
    
      desc "Truncate all existing data"
      task :truncate => "db:load_config" do
        DatabaseCleaner.clean_with :truncation
      end
    
    end
    

    That's it. You can also use the DatabaseCleaner.clean_with :truncation line inside your db/seeds.rb file directly so that you don't forget to truncate the database before seeding.