Commit e2ef9604 by Ryan Bigg

Merge pull request #127 from krainboltgreene/patch-1

Minor changes to make it more slightly readable
parents f300ef0d 008d8938
......@@ -2,37 +2,37 @@
Paranoia is a re-implementation of [acts\_as\_paranoid](http://github.com/technoweenie/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.
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 *hide* 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.
If you wish to actually destroy an object you may call `really_destroy!`.
If a record has `has_many` associations defined AND those associations have `dependent: :destroy` set on them, then they will also be soft-deleted if ``acts_as_paranoid`` is set, otherwise the normal destroy will be called.
If a record has `has_many` associations defined AND those associations have `dependent: :destroy` set on them, then they will also be soft-deleted if `acts_as_paranoid` is set, otherwise the normal destroy will be called.
## Installation & Usage
For Rails 3, please use version 1 of Paranoia:
```ruby
gem 'paranoia', '~> 1.0'
``` ruby
gem "paranoia", "~> 1.0"
```
For Rails 4, please use version 2 of Paranoia:
```ruby
gem 'paranoia', '~> 2.0'
``` ruby
gem "paranoia", "~> 2.0"
```
Of course you can install this from GitHub as well:
```ruby
gem 'paranoia', :github => 'radar/paranoia', :branch => 'master'
``` ruby
gem "paranoia", :github => "radar/paranoia", :branch => "master"
# or
gem 'paranoia', :github => 'radar/paranoia', :branch => 'rails4'
gem "paranoia", :github => "radar/paranoia", :branch => "rails4"
```
Then run:
```shell
``` shell
bundle install
```
......@@ -42,13 +42,13 @@ Updating is as simple as `bundle update paranoia`.
Run:
```shell
``` shell
rails generate migration AddDeletedAtToClients deleted_at:datetime:index
```
and now you have a migration
```ruby
``` ruby
class AddDeletedAtToClients < ActiveRecord::Migration
def change
add_column :clients, :deleted_at, :datetime
......@@ -61,33 +61,38 @@ end
#### In your model:
```ruby
``` ruby
class Client < ActiveRecord::Base
acts_as_paranoid
...
# ...
end
```
Hey presto, it's there! Calling `destroy` will now set the `deleted_at` column:
```
>> client.deleted_at => nil
>> client.destroy => client
>> client.deleted_at => [current timestamp]
``` ruby
>> client.deleted_at
# => nil
>> client.destroy
# => client
>> client.deleted_at
# => [current timestamp]
```
If you really want it gone *gone*, call `really_destroy!`
If you really want it gone *gone*, call `really_destroy!`:
```
>> client.deleted_at => nil
>> client.really_destroy! => client
``` ruby
>> client.deleted_at
# => nil
>> client.really_destroy!
# => client
```
If you want a method to be called on destroy, simply provide a `before_destroy` callback:
```ruby
``` ruby
class Client < ActiveRecord::Base
acts_as_paranoid
......@@ -97,13 +102,13 @@ class Client < ActiveRecord::Base
# do stuff
end
...
# ...
end
```
If you want to use a column other than `deleted_at`, you can pass it as an option:
```ruby
``` ruby
class Client < ActiveRecord::Base
acts_as_paranoid column: :destroyed_at
......@@ -113,7 +118,7 @@ end
If you want to access soft-deleted associations, override the getter method:
```ruby
``` ruby
def product
Product.unscoped { super }
end
......@@ -121,43 +126,43 @@ end
If you want to find all records, even those which are deleted:
```ruby
``` ruby
Client.with_deleted
```
If you want to find only the deleted records:
```ruby
``` ruby
Client.only_deleted
```
If you want to check if a record is soft-deleted:
```ruby
``` ruby
client.destroyed?
```
If you want to restore a record:
```ruby
``` ruby
Client.restore(id)
```
If you want to restore a whole bunch of records:
```ruby
``` ruby
Client.restore([id1, id2, ..., idN])
```
If you want to restore a record and their dependently destroyed associated records:
```ruby
``` ruby
Client.restore(id, :recursive => true)
```
If you want callbacks to trigger before a restore:
```ruby
``` ruby
before_restore :callback_name_goes_here
```
......@@ -165,7 +170,7 @@ For more information, please look at the tests.
## Acts As Paranoid Migration
You can replace the older acts_as_paranoid methods as follows:
You can replace the older `acts_as_paranoid` methods as follows:
| Old Syntax | New Syntax |
|:-------------------------- |:------------------------------ |
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment