Don't delete your records, move them to a different table.
Like acts_as_paranoid
, but doesn't mess with your SQL queries.
In order to fix issue#21 and any loading order issue.
Loading of ::Archive
classes is not automatic anymore.
You have to past one of the lines below (or all of them if you don't now wich framework you are using ?!) in environment.rb
or anywhere proceed after all gems are loaded.
require "acts_as_archive/adapters/rails#{Rails.version[0..0]}" if defined?(Rails) require "acts_as_archive/adapters/sinatra" if defined?(Sinatra)
gem install acts_as_archive
config.gem 'acts_as_archive'
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.
Run rake db:migrate
. Your archive table is created automatically.
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.