devise機能を用いてのログアウトが出来ない
Q&A
解決したいこと
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" ←ここを記載
以上です。