https://maki-nomad.com/rails-beginner-2/
↑こちらのサイトを参考にQ&Aサイトを作成中なのですが、
ログアウトをしようとした際に
Routing Error
No route matches [GET] "/users/sign_out"
というエラーが発生しました。原因ご存じないでしょうか?
教材(再掲) https://maki-nomad.com/rails-beginner-2/
_header.html.erb (エラー発生箇所) ↓
<header> <div class="header-logo"> Rails beginner </div> <ul> <li> <%= link_to("ログアウト", "/users/sign_out", method: :delete, data: {confirm: "本当にログアウトしますか?"}) %> </li> </ul> </header>
Routes.rb ↓
Rails.application.routes.draw do devise_for :users # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html root to: 'questions#index' get "/questions", to: "questions#index" get "/questions/new", to: "questions#new" post "/questions", to: "questions#create" get "/questions/:id", to: "questions#show" # Defines the root path route ("/") # root "articles#index" end
ターミナル ↓
sample14 % 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 以下略
ターミナルを見ると "/users/sign_out" の HTTPメソッドが GET ではなく
DELETE になっていたので、ルーティングを書き換えれば
直るのではないかと考えたのですが、参考にした記事(https://qiita.com/life_code/items/b148643312f13096ac7a)
と自分のroutes.rb の書き方がかなり異なっていたため、
routes.rb(参考記事)↓
resources :tweets, only: [:index, :show, :new, :create, :destroy, :edit, :update] do
今回の場合どのように書けばよいのかわかりませんでした。
もし何かご存知であれば教えていただけないでしょうか?
追記(2022.6.21)
こちらはRails 6を前提としています。Rails 7ではフロントエンドに改変が
入っていますので、そのままでは正しく動きません。
との回答を頂いたので rails 7 の rails 6 からの変更点を調べました。
https://qiita.com/ryohashimoto/items/f5382478c78f296d8291
↑こちらの記事には
以前のバージョンでは、button_toタグはHTTPメソッドとして、POSTを使用する
ようになっていましたが、Rails 7からはPATCHを使用するようになりました。
と書かれていたので ~~_to タグを書き直すのではないかと考えたのですが、
どのように書き直せば良いかわかりませんでした。
フロントエンド部分をどう書き直すべきでしょうか?
_header.html.erb (エラー発生箇所、再掲) ↓
<header> <div class="header-logo"> Rails beginner </div> <ul> <li> <%= link_to("ログアウト", "/users/sign_out", method: :delete, data: {confirm: "本当にログアウトしますか?"}) %> </li> </ul> </header>
application.html.erb ↓
<!DOCTYPE html> <html> <head> <title>Sample14</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_importmap_tags %> </head> <body> <%= render 'layouts/header' %> <p><%= notice %></p> <p><%= alert %></p> <div class="container"><%= yield %></div> </body> </html>
qusetions_controller.rb
class QuestionsController < ApplicationController def index @test = "テストテキスト" #@はインスタンス変数 これは文字列を出力する end def show @question = Question.find(params[:id]) end def new @question = Question.new #空のインスタンスを作り@questionに代入してる end def create @question = Question.new(question_params) if @question.save flash[:notice] = "成功!" redirect_to("/questions/#{@question.id}") else flash.now[:alert] = "失敗!" render("questions/new") end end private def question_params params.require(:question).permit(:title, :body) end end
index.html.erb
<%= @test %>
回答1件
あなたの回答
tips
プレビュー