devise機能を使用したログアウトのエラーを解決したい
初投稿です。どうしても解らないことがあり、投稿させていただきました。
Ruby on Railsにて画像投稿ができるWebアプリをつくっています。
bootstrap5と併用して、ユーザー管理機能を実装している際に、ログアウトを試してみるとエラーが発生しました。
いろいろな記事を参考にしましたが、解決できず。解決方法を教えて下さい。
発生している問題・エラー
Routing Error
No route matches [GET] "/users/sign_out,%20method:%20:delete"
Rails.root: /Users/admin/projects/recette
Application Trace | Framework Trace | Full Trace
Routes
Routes match in priority from top to bottom
※Recetteはアプリ名です。
また、localhost:3000/に接続する際には
ActionController::RoutingError (No route matches [GET] "/assets/dist/js/bootstrap.bundle.min.js"):とエラーがターミナルに出ている状況です。
該当するソースコード
<div class="col-sm-4 offset-md-1 py-4"> <h4 class="text-white">Contact</h4> <ul class="list-unstyled"> <% if user_signed_in? %> <li><a><%= link_to current_user.nickname, "#", class:"text-white" "user-nickname" %></li> <li><a href="/users/sign_out, method: :delete" class="text-white">ログアウト</a></li> <% else %> <li><a href="/users/sign_in" class="text-white">ログイン</a></li> <li><a href="/users/sign_up" class="text-white">新規登録</a></li> <% end %> </ul> </div>
<a href=
の後に
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
の記述がうまくできなかったので、/users/sign_out, method: :delete" としてあります。
サインインや新規登録も同様です。
こちらもLink_toを使用した記述があればご教授いただきたいです。
自分で試したこと
まず、エラーがGetなのが何故?となったので
rails routesにてルーティングの再確認。
Prefix Verb URI Pattern Controller#Action new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create ここ→ destroy_user_session DELETE /users/sign_out(.:format) devise/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) devise/registrations#cancel new_user_registration GET /users/sign_up(.:format) devise/registrations#new edit_user_registration GET /users/edit(.:format) devise/registrations#edit user_registration PATCH /users(.:format) devise/registrations#update PUT /users(.:format) devise/registrations#update DELETE /users(.:format) devise/registrations#destroy POST /users(.:format) devise/registrations#create
〜略〜
サインアウトはDeleteのままで合っていました。
参考にした記事
https://qiita.com/katsuomi/items/ed1b89f96e89f8c30f33
https://qiita.com/ro-ze1106/items/082d8e78b455cd3a7055
app/assets/javascript/application.jsに
require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") import "bootstrap" ←追記 import "../stylesheets/application" ←追記
してみてもエラー。
Bootstrapの導入の際の手順としては
1.
% yarn add bootstrap@next
で、Verは5.1.0を選択。
2.
続いて
% yarn add @popperjs/core
にてBootstrapが使用するpopper.jsを導入しました。
3.app/javascript/packs/application.js を読み込むための記載を、application.html.erbにおこないました。
<html> <head> <title>アプリケーション名</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> ←この部分 <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <%= yield %> </body> </html>
4.app/javascript/stylesheetsというディレクトリを作成します。
作成後、上記stylesheetsディレクトリの直下にapplication.scssファイルを作成し、application.scssに、bootstrapを読み込むための記載を行いました。
app/javascript/stylesheets/application.scss
@import "bootstrap"
5.application.jsにて、bootstrapとapplication.scssを読み込むための記載を行いました。
app/javascript/packs/application.js
require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") import "bootstrap" ←ここと import "../stylesheets/application" ←ここを記載
以上です。
あなたの回答
tips
プレビュー