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
config.gem 'acts_as_archive'
ActsAsArchive.load_from_yaml(Rails.root)
gem 'acts_as_archive'
require 'acts_as_archive'
class Application < Sinatra::Base
include ActsAsArchive::Adapters::Sinatra
end
Create config/acts_as_archive.yml
to define the archive class and archive table for each of your models:
Article:
- class: Article::Archive
table: archived_articles
It is expected that neither the archive class or archive table exist yet. ActsAsArchive
will create these automatically.
class CreateArchiveTables < ActiveRecord::Migration
def self.up
ActsAsArchive.load_from_yaml(Rails.root)
ActsAsArchive.migrate
end
def self.down
end
end
Run rake db:migrate
.
Use destroy
, destroy_all
, delete
, and delete_all
like you normally would.
Records move into the archive table instead of being destroyed.
If your model's relationship has the :dependent
option, and the relationship also uses acts_as_archive
, that relationship will archive automatically.
New migrations are automatically applied to the archive table.
No action is necessary on your part.
Use the archive class you specified in the configuration:
Article::Archive.first
Use any of the destroy methods, but add a bang (!):
Article::Archive.first.destroy!
Article.delete_all!([ "id in (?)", [ 1, 2, 3 ] ])
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 ] ])
Any relationships that were automatically archived will be restored as well.
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.
Add this line to a migration, or run it via script/console
:
Article.migrate_from_acts_as_paranoid
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.