はじめに
railsでdeviseをしようしたログインログアウト機能を実装していて、
ログアウトした際に確認ページに遷移するように実装していたところ
つまずいたので記事にしようと思います。
さらに良い方法とかがあればコメント欄か編集リクエストに記載願います。
バージョン情報
- ruby 2.6.5
- rails 6.0.3.3
前提条件
- hamlでの記載(gem 'haml-rails')
- deviseが導入済みでログインができている
コントローラーの変更
sessions_controllerのrespond_to_on_destroyがデフォルトで記述されていて
root_pathに遷移されるようになっていました。
なのでここのコードを削除します。
そこに**render '遷移先URL'**を記述することでURL先のページに遷移することができます。
# controllers/users/sessions_controller.rb
def destroy
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
set_flash_message! :notice, :signed_out if signed_out
yield if block_given?
respond_to_on_destroy #デフォルトの記述 ← コード削除
render '遷移先URL' #renderで遷移先のURLを記述 ← コード記入
end
Viewの作成
私はusers/destoroy
にdestroy.html.hamlファイルを作成しました。
%h1 ログアウトしました。
= link_to "マイページに戻る", "/"
コントローラーのカスタマイズ
**sesstions: "users/sessions"**を追記して、sessionsをカスタマイズしました!!
devise_for :users, controllers: {
registrations: "users/registrations",
sessions: "users/sessions" #カスタマイズ
}
ルーティングのカスタマイズ
ルーティングもカスタマイズします!
HTTPメソッド**:delete**, URL, コントローラー名#アクション名
devise_scope :user do
get 'profiles', to: 'users/registrations#new_profile'
post 'profiles', to: 'users/registrations#create_profile'
get 'addresses', to: 'users/registrations#new_address'
post 'addresses', to: 'users/registrations#create_address'
delete 'users/destroy', to: 'devise/sessions#destroy' #追記
end
二つをあわせて
routes.rb
devise_for :users, controllers: {
registrations: "users/registrations",
sessions: "users/sessions" #カスタマイズ
}
devise_scope :user do
get 'profiles', to: 'users/registrations#new_profile'
post 'profiles', to: 'users/registrations#create_profile'
get 'addresses', to: 'users/registrations#new_address'
post 'addresses', to: 'users/registrations#create_address'
delete 'users/destroy', to: 'devise/sessions#destroy' #追記
end
まとめ
まだまだMVCの理解がないと感じました。
冷静になって考えたらすぐに解決できた問題でした。
そして、マークダウン の書き方にも苦戦してます。
記事書くのにすごい時間かかってしまっているので早くなれなければ…
もっとアウトプットしていきます。
しょうま