Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
140 lines (93 sloc) 2.95 KB


Don't delete your records, move them to a different table.

Like acts_as_paranoid, but doesn't mess with your SQL queries.


gem install acts_as_archive

Rails 2


config.gem 'acts_as_archive'

Rails 3


gem 'acts_as_archive'


require 'acts_as_archive'

Add to models

Add acts_as_archive to your models:

class Article < ActiveRecord::Base


Next time you run rake db:migrate, your archive tables will be created automatically.

That's it!

Use destroy, destroy_all, delete, and delete_all like you normally would.

Records move into the archive table instead of being destroyed.

If any of your model's relationships have the :dependent option and also use acts_as_archive, those relationships will archive automatically.

What if my schema changes?

New migrations are automatically applied to the archive table.

No action is necessary on your part.

Query the archive

Add ::Archive to your ActiveRecord class:


Delete records without archiving

Use any of the destroy methods, but add a bang (!):

Article.delete_all!([ "id in (?)", [ 1, 2, 3 ] ])

Restore from the archive

Use any of the destroy/delete methods on the archived record to move it back to its original table:

Article::Archive.delete_all([ "id in (?)", [ 1, 2, 3 ] ])

Magic columns

You will find an extra deleted_at datetime column on the archive table.

You may manually add a restored_at datetime column to the origin table if you wish to store restoration time as well.

Migrate from acts_as_paranoid

Add this line to a migration, or run it via script/console:


This copies all records with non-null deleted_at values to the archive.

Running specs

Contributions are always welcome.

gem install acts_as_archive --development

spec/run essentially runs the following:

ACTIVERECORD=3 spec -f n -c spec
ACTIVERECORD=2 spec -f n -c spec/acts_as_archive_spec.rb
RAILS=2 spec -f n -c spec/acts_as_archive_spec.rb
RAILS=3 spec -f n -c spec/acts_as_archive_spec.rb
SINATRA=1 spec -f n -c spec/acts_as_archive_spec.rb

If you want to hack on the supporting gems (mover and also_migrate), vendor them with the following command:

externals un
Something went wrong with that request. Please try again.