Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
acts_as_paranoid for Rails 3
Ruby
branch: master

This branch is 209 commits behind radar:rails4

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
test
.gitignore
Gemfile
Gemfile.lock
LICENSE
README.md
Rakefile
paranoia.gemspec

README.md

Paranoia

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.

Installation & Usage

Put this in your Gemfile:

gem 'paranoia'

Then run bundle. Done.

Updating is as simple as bundle update paranoia.

Rails 3

In your Gemfile:

gem 'paranoia'

Then run:

bundle install

Rails 2:

In your config/environment.rb:

config.gem 'paranoia'

Then run:

rake gems:install

Run your migrations for the desired models

class AddDeletedAtToClient < ActiveRecord::Migration
  def self.up
    add_column :clients, :deleted_at, :datetime
  end

  def self.down
    remove_column :clients, :deleted_at
  end
end

Usage

In your model:

class Client < ActiveRecord::Base
  acts_as_paranoid

  ...
end

Hey 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

  ...
end

You can replace the older acts_as_paranoid methods as follows:

find_with_deleted(:all)       # => unscoped
find_with_deleted(:first)     # => unscoped.first
find_with_deleted(id)         # => unscoped.find(id)

find_only_deleted(:all)       # => only_deleted
find_only_deleted(:first)     # => only_deleted.first
find_only_deleted(id)         # => only_deleted.find(id)

License

This gem is released under the MIT license.

Something went wrong with that request. Please try again.