Paranoia is a re-implementation of acts_as_paranoid for Rails 3, using much, much, much less code.
You would use either plugin / gem if you wished that when you called destroy on an Active Record object that it didn't actually destroy it, but just "hid" the record. Paranoia does this by setting a deleted_at field to the current time when you destroy a record, and hides it by scoping all queries on your model to only include records which do not have a deleted_at field.
Put this in your Gemfile:
gem 'paranoia'Then run:
bundle installUpdating is as simple as bundle update paranoia.
Run:
rails generate migration AddDeletedAtToClients deleted_at:datetimeand now you have a migration
class AddDeletedAtToClients < ActiveRecord::Migration
def change
add_column :clients, :deleted_at, :datetime
end
endclass Client < ActiveRecord::Base
acts_as_paranoid
...
endHey presto, it's there!
If you want a method to be called on destroy, simply provide a before_destroy callback:
class Client < ActiveRecord::Base
acts_as_paranoid
before_destroy :some_method
def some_method
# do stuff
end
...
endYou can replace the older acts_as_paranoid methods as follows:
| Old Syntax | New Syntax |
|---|---|
find_with_deleted(:all) |
Client.with_deleted |
find_with_deleted(:first) |
Client.with_deleted.first |
find_with_deleted(id) |
Client.with_deleted.find(id) |
This gem is released under the MIT license.