Help us understand the problem. What is going on with this article?

Rails4.2 で devise + paranoia を使った論理削除後に同じメールアドレスで登録しようとした場合のユニーク制約を回避する方法(案)

More than 3 years have passed since last update.

devise + paranoia を使った論理削除の実装が簡単、かつ便利なわけですが、実装時に参考にした以下のページに、

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

削除済のユーザーと同じ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でユーザーバリデーションを実現する方法はないですかねぇ。。。

とあり困っておりました。

で、結局は destroy 直後にメールアドレスを変更しちゃえばいいんじゃないかと思い立ち、

app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

...

def destroy

  ...

  resource.destroy

  resource.update(email: resource.deleted_at.to_i.to_s + '_' + resource.email.to_s)

  ...

ってオーバーライドしたらいい感じに動きました。

論理削除後のメールアドレスは [POSIX Time]_[元のメールアドレス] になり、余程の事がなければ衝突はしないだろうし /lib/ 内の devise の元のコード触るのも気が引けたので、むしろこっちのが良いかなと考えています。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away