1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

miriwo毎日投稿のついで(内容はランダム)Advent Calendar 2019

Day 17

Rails6 ログアウト機能作成中にルーティングに問題ないのにエラーが出た話

Posted at

目的

  • ログアウト機能作成中にルーティングに問題は無いのにルーティングエラーが出た時の話をまとめる。

結論

  • ログアウトボタンを押下した時の設定でmethodpostに指定していなかった。

エラーまでの経緯

  • ログアウト機能を作りたかった。

  • 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へ送るときはmethodpostにしてあげないといけないのにしてない。
  • 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"}) %>
    
  • ログアウトすることができた。

残件

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?