db_rollback.rake
 namespace :db do
      namespace :rollback do
        rule "" do |t|
          back = t.name.gsub("db:rollback:", '').to_s
          back = "1" if back == "db:rollback"
          ENV['back'] = back
          Rake::Task["db:rollback:default"].invoke
        end

        desc "Rollback the database schema"
        task :default => :environment do
          schema = ActiveRecord::Migrator.current_version.to_i
          if ENV.include?("back") && ENV['back'].to_i <= schema
            rollback = schema - ENV['back'].to_i
          else
            rollback = schema - 1
          end
          ActiveRecord::Migrator.migrate("db/migrate/", rollback)
          puts "schema rolled back to verison #{rollback} from #{schema}"
        end
      end
    end
Now you can do stuff like:
rake db:rollback:4
This will rollback the database 4 versions back. What if you want to move it forward though? Just pass a negative integer like so:
rake db:rollback:-3
Language Ruby / Tagged with rake