前提・実現したいこと
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で通ってしまいます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。