【Rails・devise】アカウントロック解除ボタンを実装する
結論
アカウントロック解除ボタンを設置する
アカウントロック解除ボタンが、アカウントロックされている人にのみ表示されるようにする
アカウントロック解除ボタンを押すと、対象ユーザーの情報に対して、unlock_access!メソッドが動くようにする
実装
まずはアカウントロック解除ボタンを設置します。
特に指定はないですが、button_to などを使って実装しました。
show.html.erbなど
<%= button_to 'アカウントロック解除', '#', class: "btn btn-primary" %>
続いて、アカウントロックされている人のみに表示するようにする方法ですが、deviseのlockableを使用するときのカラムである、locked_atを使います。
このlocked_atに値が入っているユーザーはロックされているので、それを使って、アカウントがロックされているかどうかを判断します。
以下のような感じです。
show.html.erbなど
<%= button_to アカウントロック解除', '#', class: "btn btn-primary" if account_locked?(user) %>
helperメソッド
def account_locked?(user)
user.locked_at.present?
end
最後に、アカウントロックボタンを押したら、対象のユーザーにunlock_access!が走るようにします。
こちらはroutingとcontrollerにメソッドを追加してあげる必要があります。
サンプルでは以下のような感じです。
routing
resources user do
post "/unlock", to: "users#unlock"
end
users_controller.rb
def unlock
@user = User.find(params[:id])
@user.unlock_access!
redirect_to users_path
end
こんな感じで実装できるかと思います!