Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

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

tree: 911f27d612

Fetching latest commit…

Cannot retrieve the latest commit at this time



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

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


sudo gem install acts_as_archive


config.gem 'acts_as_archive'

Update models

Add acts_as_archive to your models:

class Article 

Run acts_as_archive

cd your_rails_app
acts_as_archive Article

Run this command every time you add acts_as_archive to a new model.

This command creates your archive tables (archived_articles as per the example).

Archive tables mirror your table's structure, but with an additional deleted_at column.

That's it!

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

Records move into the archive table instead of being destroyed.

What if my schema changes?

New migrations are automatically applied to the archive table.

Query the archive

Add ::Archive to your ActiveRecord class:


Restore from the archive

Use restore_all to copy archived records back to your table:

Article.restore_all([ 'id = ?', 1 ])

Auto-migrate from acts_as_paranoid

If you previously used acts_as_paranoid, the acts_as_archive command will automatically move your deleted records to the archive table (see Run acts_as_archive).

Original deleted_at values are preserved.

Add indexes to the archive table

To keep insertions fast, there are no indexes on your archive table by default.

If you are querying your archive a lot, you will want to add indexes:

class Article  [ :id, :created_at, :deleted_at ]

Run the acts_as_archive command upon adding new indexes (see Run acts_as_archive).

Something went wrong with that request. Please try again.