目的
- ログアウト機能作成中にルーティングに問題は無いのにルーティングエラーが出た時の話をまとめる。
結論
- ログアウトボタンを押下した時の設定で
method
をpost
に指定していなかった。
エラーまでの経緯
-
ログアウト機能を作りたかった。
-
Bootstrapを用いたheaderにログアウトボタンを作成し、押されるとルーティング経由でコントローラのアクション内で
session[:user_id]
にnil
を入れてログアウト処理を行うものだった。 -
下記に各ファイルの一部の抜粋を記載する。
-
headerのビュー
<li class="navbar-item"><a href="/logout" class="nav-link">ログアウト</a></li>
-
ルーティング
post "logout" => "users#logout"
-
コントローラのアクション
def logout session[:user_id] = nil flash[:notice] = "ログアウトしました" redirect_to("/login") end
-
ビューからの送り先のルーティングの
logout
にスペルミスもない。
原因
- ビューからルーティングのpostへ送るときは
method
をpost
にしてあげないといけないのにしてない。 -
post
に送るときは指定してあげないとpost "logout" => "users#logout"
を見つけられない。
解決方
-
取り急ぎつまりまくったので
link_to
を使用してログアウトできるかどうかだけ確認した。 -
下記に修正したheaderのビューファイルの内容を記載する。
<!--<li class="navbar-item"><a href="/logout" class="nav-link">ログアウト</a></li>--> <%= link_to("ログアウト", "/logout", {method: "post"}) %>
-
ログアウトすることができた。
残件
-
link_to
を使用したログアウトは行えたものの、Bootstrapのheaderでのmethod
をpost
にする方法を知らないのでそこを解決する。 - タグの中で
method="post"
すればいけそうだがうまく行かなかったので解決する。 - 若干体調が悪いため今日はここまでとする。