Routing Errorが起きた
deviseを導入して、ログアウトしようとしたところ、下記のエラーが発生しました
ActionController::RoutingError (No route matches [GET] "/users/sign_out"):
このエラーの原因はアプリを作成したばかりで、javascriptが正常に動作していないことが原因でした
原因の確認
ルーティングがあっているか確認
destroy_user_session DELETE /users/sign_out(.:format) public/sessions#destroy
<%= link_to destroy_user_session_path, method: :delete, style: "display:flex; align-items: center; flex-direction: column;" %>
path名も正しい、method: :delete
と記述しているにもかかわらず、ルーティングエラーでは[GET]を受け取っているようです
というのもこのmethodをサーバー側に伝えているのはjavascriptのようで、ここが動作していないとmethodがdeleteと伝わらないようです!
解決編
このコマンドを打てば一発解決しました!
$ yarn add @babel/plugin-proposal-private-methods @babel/plugin-proposal-private-property-in-object
何をしているかというと2つのプラグインをインストールしています!
@babel/plugin-proposal-private-methods
- このプラグインは、JavaScriptのクラス内でプライベートメソッドを使用できるようにするためのものです
@babel/plugin-proposal-private-property-in-object
- このプラグインは、オブジェクトリテラル内でプライベートプロパティを使用できるようにするためのものです
これにより、プライベートなクラスプロパティをオブジェクトの一部として扱えるようになります
さいごに
新しいアプリ作成するたびにログアウトでエラー起きて同じことをしてたので、メモ残しとこうと思います笑
このコマンドはrails new
したらとりあえずやっとけと、メンターさんに教えてもらったコマンドで、javascriptが正常に動作するために必要と聞いていました
プラグインについてまだまだわからないことが多いので、もう少し調べようと思います!
ひとまず今回はエラー解決方法をメモしておきます✍️
誤り等ございましたら教えていただけますと幸いです!