👻

Rails|退会処理済み会員が再度新規登録できるようにする方法

2023/09/19に公開

以前、こちらの記事で、退会済み会員のログインを阻止する方法を紹介しました。
https://zenn.dev/airiin/articles/4d6208aaa9cc64

しかし、上記の方法では、退会済み会員が新規登録ができない状態になっていました。
(∵deviseのバリデーションでメールアドレスがuniqueで指定されているから。)

その解決策を2通り紹介します。一長一短なので、より良い解決策があれば教えてください!!orz

退会時にメールアドレスを変更する

私はこちらを採用しました。

users_controller.rb
 #退会用アクション
 def quit
    # ユーザーのメールアドレスを一意なものに変更
    current_user.skip_reconfirmation!
    unique_email = "deleted_" + Time.now.to_i.to_s + current_user.email
    current_user.update(email: unique_email, is_deleted: true)
    reset_session
    flash[:notice] = "退会処理が完了しました"
    redirect_to root_path
  end

current_user.skip_reconfirmation!
deviseでは勝手にメールアドレスが変更できないよう、confirmableという制約がかかっています。退会処理を行う時だけ、この制約をスキップします。

これでOKです。

deviseのバリデーションを変更する

user.rb
devise :database_authenticatable, :registerable,
         :rememberable, :validatable, :confirmable

ユーザーモデルの中に、上記のような記述があります。このうち、validatableというのが、deviseの初期設定のバリデーションなので、まずこの記述を削除します。

次に、「ユーザーが退会している場合に限り、emailカラムの uniquenessを問わない」というバリデーションを追加します。

user.rb
validates :email, uniqueness: { scope: :is_deleted, if: -> { is_deleted == false } }

これでOKです。

参考にさせていただいた記事

https://patorash.hatenablog.com/entry/2020/04/09/112421

Discussion