Don't delete your records, move them to a different table.
acts_as_paranoid, but doesn't mess with your SQL queries.
gem install acts_as_archive
require 'acts_as_archive' class Application < Sinatra::Base include ActsAsArchive::Adapters::Sinatra end
Article: - class: Article::Archive table: archived_articles
Specify the name of your model, the name of the archive class, and the name of the archive table.
If the archive model is created automatically if it does not exist.
rake db:migrate. Your archive table is created automatically.
delete_all like you normally would.
Records move into the archive table instead of being destroyed.
Automatically archive relationships
If your model's relationship has the
:dependent option, and the relationship also uses
acts_as_archive, that relationship 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
Use the Archive model you specified in the configuration:
Delete records without archiving
Use any of the destroy methods, but add a bang (!):
Article::Archive.first.destroy! 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.first.destroy Article::Archive.delete_all([ "id in (?)", [ 1, 2, 3 ] ])
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
This copies all records with non-null
deleted_at values to the archive.
There is a wiki entry that describes the development setup in-depth.