Find file
Fetching contributors…
Cannot retrieve contributors at this time
119 lines (77 sloc) 2.47 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

There is a wiki entry that describes the development setup in-depth.