👻
Rails|退会処理済み会員が再度新規登録できるようにする方法
以前、こちらの記事で、退会済み会員のログインを阻止する方法を紹介しました。
しかし、上記の方法では、退会済み会員が新規登録ができない状態になっていました。
(∵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です。
参考にさせていただいた記事
Discussion