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

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

ただいまの
回答率

87.34%

ログアウトはcontrollerでpostではないのでしょうか?

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 447

score 53

前提・実現したいこと

現在簡単なsnsを作っているのですが、ログアウトしようとするとエラーが出てしまいます。少し前まではエラーが出ることなくログアウトすることができたので、今日何かを追加したせいでログアウトがうまくいかなくなってしまったのかと思うのですが、その原因が特定できていません。

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

そもそも/logoutはgetではなくpostに指定しているのになぜgetを探そうとするのか?

No route matches [GET] "/logout"

該当のソースコード

<!DOCTYPE html>
<html>
  <head>
    <title>Konpeki</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>
    <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet">
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
  <header>
    <div class="heading">
    <% if session[:user_id] %>
      <div class="header-left">
        <span >Members</span>
      </div>
      <% else %>
      <div class="header-left">
        <%=link_to("Members","/") %>
      </div>
      <% end %>
      <div class="header-right">
      <% if session[:user_id]%>

        <%=link_to("ユーザー一覧","/users/index") %>
        <%=link_to("投稿する","/posts/new") %>
        <%=link_to("投稿一覧","/posts/index") %>
        <%= link_to("ログアウト", "/logout", {method: :post}) %>
        <span><%=session[:user_id]%></span>


        <% else%>
         <div class="else">
        <%=link_to("ログイン","/login")%>
        <%=link_to("新規登録","/signup")%>
        <%=link_to("Membersとは","/")%>
        </div>
        <% end%>

      </div>
    </div>
  </header>
    <%= yield %>
  </body>
</html>
Rails.application.routes.draw do

  post"logout" =>"users#logout"
  post "login"=>"users#login"
  get"login" => "users#login_form"

  post"users/:id/update" => "users#update"
  get 'users/index'
  get '/'=> "home#top"
  get 'posts/index' => "posts#index"
  get "posts/new" =>"posts#new"
  post"posts/create" => "posts#create"
  get"posts/:id" => "posts#show"

 get"posts/:id/edit" =>"posts#edit"

 post"posts/:id/update" =>"posts#update"
 post"posts/:id/destroy" =>"posts#destroy"

 get "users/index"=>"users#index"
 get"signup" =>"users#new"
 post"users/create" => "users#create"
 get"users/:id" =>"users#show"

 get"users/new" => "users#new"
 get"users/:id/edit" => "users#edit"


end
def logout

    session[:user_id]= nil
    flash[:notice]="ログアウトしました"
    redirect_to ("/login")
  end

試したこと

ルーティングのpost"logout"をget"logoutにしたらログアウトはできたのですが、progateでsessionの値を変更するときはpostにすると習ったので、postの方がいいのかと考えています。また以前はpostでできたので、なぜ今できないのかを知りたいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

的外れかもしれませんが、
link_to("ログアウト", "/logout", {method: :post})
の {} を外して、
link_to("ログアウト", "/logout", method: :post)
にしたらどうなりますか?

この辺の記事を見ると、 {} なしで動きそうだったので、試してみてもいいかなと思いました
link_toはRailsの基本!これであなたも必ずlink_toが書ける!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/04 14:54

    ご回答ありがとうございます!エラーが出てしまいます、、

    キャンセル

  • 2019/11/04 16:47 編集

    かっこも外してこうするといかがでしょう?
    普段こう書いているので動きそうなのですが...
    link_to "ログアウト", "/logout", method: :post
    (link_to と "ログアウト" の間にはスペース必須です)

    他の方もこんな風に {} なしで書いています
    https://qiita.com/STHEXA/items/aa6a5af6cfbdc7b751a3#link_to%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8%E3%81%AF

    それと、もしよかったらエラーの内容を省略せず教えてもらっても構いませんか?

    キャンセル

  • 2019/12/29 10:08

    すっかり返答忘れていました!申し訳ございません!なんとか理解できました!

    キャンセル

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

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る