最近、Railsの認証エンジンであるdeviseが色んな意味で注目されてますね。
概要
deviseのみで退会処理を行うと、退会ユーザーが物理削除される。
ということで、devise+paranoiaでユーザーの論理削除を実現する。
前提
- deviseインストール済
paranoiaをインストール&設定
Rails4 は
gem "paranoia", "~> 2.0"
Rails3 は
gem "paranoia", "~> 1.0"
bundle install
deviseが設定されているmodelに対して、下記のカラムを追加する。
この場合はUserモデルとします。
rails generate migration AddDeletedAtToUsers deleted_at:datetime:index
rake db:migrate
Userモデルに対して、下記を追加
acts_as_paranoid
終了!!
これで、終わりです。
退会処理をすると、
deleted_at に退会日時が設定されるようになってます。
注意
削除済のユーザーと同じemailを登録しようとするとユニーク制約にひっかかり、登録できない
Rails4 + devise + paranoiaで論理削除を考慮したユーザーバリデーションを実現する
これで解決できると思ったら・・・
Rails4.2ではvalidates_uniqueness_of_without_deleted が undefined method になる。。
Issueにもあがってたのね。。
[validates_uniqueness_of_without_deleted undefined in Rails 4.2]
(https://github.com/ActsAsParanoid/acts_as_paranoid/issues/20)
Rails4.2でユーザーバリデーションを実現する方法はないですかねぇ。。。
参考
雑記
paranoiaのREADMEを見た方が速いし、詳しく書いてあるので、そっち見てください。。。