About-rails3-act-as-paranoid

データ論理削除用GEM rails3_act_as_paranoid 導入手順

Gemfileに以下を追加しbundle installする

1
gem 'rails3_acts_as_paranoid'

論理削除対象モデルにカラム deleted_at:timestamp を予め設けておく

1
$ rails g migration AddDaletedAtToUser deleted_at:timestamp

論理削除対象モデルにacts_as_paranoidを定義

1
2
3
4
5
class User < ActiveRecord::Base
  acts_as_paranoid

  ……
end

※子モデルも同時に論理削除対象とする場合、以下のようにすること

1
2
$ rails g migration AddDeletedAtToUser deleted_at:timestamp
$ rails g migration AddDeletedAtToTask deleted_at:timestamp
1
2
3
4
class User < ActiveRecord::Base
  acts_as_paranoid
  has_many :task, :dependent => :destroy
end
1
2
3
4
class Task < ActiveRecord::Base
  acts_as_paranoid
  belongs_to :user
end

その他

・論理削除されたレコードを取得する

User.only_deleted

・通常レコードと論理削除されたレコードをまとめて取得する

User.with_deleted

・論理削除からの復帰

User.only_deleted.find(2).recover

まとめて復帰するなら

User.only_deleted.each &:recover

なお、親子関係にあるモデル間において親モデルが論理削除から復帰すると、自動的に小モデルも論理削除から復帰する

参考サイト:
http://d.hatena.ne.jp/choripon/20101229/1293634455
http://doruby.kbmj.com/rick_blog/20090416/Ruby_On_Rails__acts_as_paranoid