こんにちは、tt_tsutsumiです。
今回はユーザー退会機能について実装を行いたいと思います。
こちらの記事が何方かのお役に立てると嬉しいです。
ユーザー新規登録、編集の記事は折を見て記載したいと思いますので、
今回はユーザー退会機能と退会済みユーザーがログインを行えない様に実装致します。
##1. 会員状況の定義
ユーザーの会員状況をenum(boolean型)で設定をする。
boolean型は真偽値を保存する型で、2つの状況しか登録する事が出来ません。
今回はユーザーが 有効会員か退会済み会員か の2択なのでこの型を使用します。
また is_active が true(有効会員) の場合ログインが出来る設定を行います。
※ is_active が false(退会済み会員) の場合はログインが行えません。
enum is_active: {Available: true, Invalid: false}
#有効会員はtrue、退会済み会員はfalse
def active_for_authentication?
super && (self.is_active === "Available")
end
#is_activeが有効の場合は有効会員(ログイン可能)
##2. routeの記載
resources :users do
member do
get "check"
#ユーザーの会員状況を取得
patch "withdrawl"
#ユーザーの会員状況を更新
end
end
##3. アクションの作成
次にコントローラーにアクションの作成を行います。
※ 今回は退会確認を行うページの作成も行ったのでアクションが2つとなります。
def check
@user = User.find(params[:id])
#ユーザーの情報を見つける
end
def withdrawl
@user = User.find(current_user.id)
#現在ログインしているユーザーを@userに格納
@user.update(is_active: "Invalid")
#updateで登録情報をInvalidに変更
reset_session
#sessionIDのresetを行う
redirect_to root_path
#指定されたrootへのpath
end
private
def user_params
params.require(:user).permit(:active)
end
##4. リンク先の作成
リンク先の作成を行いユーザーを退会させます。
methodは削除ではなく更新になるのでpatchの記載となります。
<div class="withdrawl">
<%= link_to "Withdrawal", withdrawl_user_path(@user.id), method: :patch %>
</div>
これでユーザー退会機能と退会済みユーザーがログインを行えない様に実装が行えました。
ご覧いただきありがとうございました !!