プラグイン名

acts_as_paranoidプラグイン

このプラグインができること

  1. やりたいことは理論削除。よくdelete_flag(boolean)などとしてフラグが立っていたら削除済みとして扱っていたようなものを、半自動化する。
  2. destroyで本当に削除するのではなく、deleted_atカラムにタイムスタンプを入れるようにする。
  3. find系メソッドを書き換えて、deleted_atカラムにタイムスタンプが入ってないものだけを検索対象とする
  4. 削除済みのものだけ、削除済みのものとそうでないものを含めた検索も可能

対象バージョン

1.2系 2.0系

ちょー簡単な使い方

./script/plugin install acts_as_paranoid
でインストールして、
class AddDeletedAt < ActiveRecord::Migration
 def self.up
   add_column users, :deleted_at, :datetime
 end
 def self.down
   remove_column :users, :deleted_at
 end
end
こんな感じでdeleted_atカラムを追加し、マイグレートできたらモデルに
class User < ActiveRecord::Base
 acts_as_paranoid
end
てな具合に使用を宣言する。
すると、
  • destroyメソッドで削除ではなくdeleted_atを埋めるようになり
  • findメソッドでdeleted_atがnullのものだけ対象にするようになり
  • 削除済みも含めて何かしたいときはfind_with_deletedメソッドを使うか、
  • User.find(:all, :with_deleted => true)と使う
でもちょっとバグいので、DoRuby|Ruby on Railsでacts_as_paranoidを使い倒すを参考にするのがいいかも。

公式ページ


日本語解説ページ

※基本的な使い方はこれでOK

※Rails2.0への対応の悪影響や、バグのパッチを公表しています

外国語解説ページ

  • まだ見つけてない

のうはう

  • AR.find_with_deletedまたはAR.find(..., :with_deleted => true)で削除済みのものが検索対象に入るようなんだけど、バグっていてエラーになる。
Rails開発日記|論理削除プラグイン(バグ修正)この記事を参考に回避する必要あり。
あと上にも書いたけどDoRuby|Ruby on Railsでacts_as_paranoidを使い倒すとか。

コメント

最終更新:2008年03月11日 21:55