LoginSignup
27
27

More than 5 years have passed since last update.

Rails4+devise+paranoiaで退会ユーザーの論理削除を簡単に実現する

Last updated at Posted at 2015-02-08

最近、Railsの認証エンジンであるdeviseが色んな意味で注目されてますね。

:black_square_button: 概要

deviseのみで退会処理を行うと、退会ユーザーが物理削除される。
ということで、devise+paranoiaでユーザーの論理削除を実現する。

:black_square_button: 前提

  • deviseインストール済

:black_square_button: paranoiaをインストール&設定

Rails4 は

Gemfile
gem "paranoia", "~> 2.0"

Rails3 は

Gemfile
gem "paranoia", "~> 1.0"
bundle install

deviseが設定されているmodelに対して、下記のカラムを追加する。
この場合はUserモデルとします。

rails generate migration AddDeletedAtToUsers deleted_at:datetime:index
rake db:migrate

Userモデルに対して、下記を追加

app/model/user.rb
  acts_as_paranoid

終了!!
これで、終わりです。

退会処理をすると、
deleted_at に退会日時が設定されるようになってます。

:black_square_button: 注意

削除済のユーザーと同じemailを登録しようとするとユニーク制約にひっかかり、登録できない

Rails4 + devise + paranoiaで論理削除を考慮したユーザーバリデーションを実現する
これで解決できると思ったら・・・
Rails4.2ではvalidates_uniqueness_of_without_deleted が undefined method になる。。

Issueにもあがってたのね。。
validates_uniqueness_of_without_deleted undefined in Rails 4.2

Rails4.2でユーザーバリデーションを実現する方法はないですかねぇ。。。

:black_square_button: 参考

:small_red_triangle: paranoia
:small_red_triangle: devise

:black_square_button: 雑記

paranoiaのREADMEを見た方が速いし、詳しく書いてあるので、そっち見てください。。。

27
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
27