質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1104閲覧

ログアウト時にNo route matches [GET] "/logout" エラーが出る

takuma_lol

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/05/03 07:31

編集2021/05/06 06:42

前提・実現したいこと

Railsチュートリアル8章に取り組んでいます。
ヘッダーのログアウトボタンからログアウトを実行すると、No route matches [GET] "/logout" のエラーが出てしまいます。
ルーティングは確認しましたが問題はなさそうで、他の方法(後述します)を試すも失敗しました。
低レベルな質問で大変恐縮ですが、よろしくお願いいたします。

発生している問題・エラーメッセージ

No route matches [GET] "/logout" Rails.root: /home/ubuntu/environment/sample_app

該当のソースコード

routes

1Rails.application.routes.draw do 2 3 get 'users/new' 4 root 'static_pages#home' 5 get '/help', to: 'static_pages#help' 6 get '/about', to: 'static_pages#about' 7 get '/contact', to: 'static_pages#contact' 8 get '/signup', to: 'users#new' 9 get '/login', to: 'sessions#new' 10 post '/login', to: 'sessions#create' 11 delete '/logout', to: 'sessions#destroy' 12 resources :users 13 14end

sessionController

1def destroy 2 log_out 3 redirect_to root_url 4end

sessionHelper

1def log_out 2 3 session.delete(:user_id) 4 @current_user = nil 5end

headerHTMLerb

1<%= link_to "Log out", logout_path, method: :delete %>

試したこと

https://teratail.com/questions/164311
こちらを参考にjQueryの読み込みを行いましたが、解決しませんでした。(他の方はこの方法で解決する場合が多いようでした...)

補足情報(FW/ツールのバージョンなど)

以下のようなテストを書いており、

test "login with valid information followed by logout" do
get login_path
post login_path, params: { session: { email: @user.email,
password: 'password' } }
assert is_logged_in?
assert_redirected_to @user
follow_redirect!
assert_template 'users/show'
assert_select "a[href=?]", login_path, count: 0
assert_select "a[href=?]", logout_path
assert_select "a[href=?]", user_path(@user)
delete logout_path
assert_not is_logged_in?
assert_redirected_to root_url
follow_redirect!
assert_select "a[href=?]", login_path
assert_select "a[href=?]", logout_path, count: 0
assert_select "a[href=?]", user_path(@user), count: 0
end

logoutボタンを押した後にリダイレクトに失敗している(?)ため、このテストは本来であればREDになると思うのですが、なぜかGREENで通ってしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

route.rbにおいて、該当箇所のdeleteをgetに変更したところ、想定通りの動きをしました(テストを通過させるために、テストの該当箇所も同様にdelete=>getに変更しました)。
ただし、問題の根本的な解決にはなっていない感じがあるので、時間のあるときにもう少し検討してみたいと思います。

投稿2021/05/06 09:00

takuma_lol

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こちらを参考にjQueryの読み込みを行いましたが、解決しませんでした。

jQueryではなくrails-ujsが必要です。

投稿2021/05/03 07:39

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takuma_lol

2021/05/06 06:27

app/assets/jacascripts/application.jsにおいてrails-ujsを読み込み、Gemfileにrails-ujsを記述しbundle-installを行いました。その後、rails serverを再起動し確認しましたが、問題は解決されませんでした。 他に可能性のある原因が存在するか、教えていただけると大変ありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問