No route matches [GET] “/users/sign_out”のエラー

Ruby on Rails

Ruby on Railsでdeviseを使用してログイン機能を実装していたら、ログアウトボタンを設置してクリックしたら、表題のエラーが発生してしまいました。

解決方法は以下でした。

routes.rbに以下のコードを追加しました。

  devise_scope :user do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end

以下を参考にしました。ありがとうございます。

スポンサーリンク

状況

以下をapplication.html.erbに追加しました。

<%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "button is-warning is-light" %>

config/initializers/devise.rbは以下のように記載されていました。

config.sign_out_via = :delete

上記をconfig.sign_out_via = :getにしても治るという記事もありましたが、ダメでした。

ちなみにrails routesは以下です。

% rails routes
                   Prefix Verb   URI Pattern                                                                              Controller#Action
                     root GET    /                                                                                        home#index
         new_user_session GET    /users/sign_in(.:format)                                                                 users/sessions#new
             user_session POST   /users/sign_in(.:format)                                                                 users/sessions#create
     destroy_user_session DELETE /users/sign_out(.:format)                                                                users/sessions#destroy
        new_user_password GET    /users/password/new(.:format)                                                            devise/passwords#new
       edit_user_password GET    /users/password/edit(.:format)                                                           devise/passwords#edit
            user_password PATCH  /users/password(.:format)                                                                devise/passwords#update
                          PUT    /users/password(.:format)                                                                devise/passwords#update
                          POST   /users/password(.:format)                                                                devise/passwords#create
 cancel_user_registration GET    /users/cancel(.:format)                                                                  users/registrations#cancel
    new_user_registration GET    /users/sign_up(.:format)                                                                 users/registrations#new
   edit_user_registration GET    /users/edit(.:format)                                                                    users/registrations#edit
        user_registration PATCH  /users(.:format)                                                                         users/registrations#update
                          PUT    /users(.:format)                                                                         users/registrations#update
                          DELETE /users(.:format)                                                                         users/registrations#destroy
                          POST   /users(.:format)                                                                         users/registrations#create
               refile_app        /attachments                                                                             #<Refile::App app_file="/Users/user/.bundle/ruby/2.6.0/refile-46b4178654e6/lib/refile/app.rb">
       rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
       rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
     rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroyとなっているのにGETで呼ばれているのがエラーの原因みたいですね。

明示的にルーティングしてあげることで解決したようですね。

フリーランスを目指すなら【テックパートナーズカレッジ】

未経験者向けWEBスクール【SHElikes】

コメント