GET以外のHTTPメソッドが効かないとき
今日、GET以外のHTTPメソッドが効かなくなってしまうエラーに遭遇しました。
具体的には、ビューに
<%= link_to "ログアウト", destroy_user_session_path, method: :delete%>
と書いてログアウトボタンを作ってあったのですが、ログアウトボタンを押すと以下のようなエラーに。。。
HTTPメソッドがGETになってしまうせいでuserコントローラーのshowアクションが動いてしまい、couldn't find User with 'id'=sign_out というエラーが出ておりました。
きちんとボタンには method: :delete を指定してあげていたにも関わらずHTTPメソッドがdeleteになってくれない。
ブラウザ上で検証ツール使って確認してみてもきちんとHTMLに変換されており、
<a rel="nofollow" data-method="delete" href="/users/sign_out">ログアウト</a>
というように data-method="delete" となってくれている。
解決方法
head の中から
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
の記述が消えていたことが原因でした。
なのできちんと記述してあげると、GET以外のHTTPメソッドが機能してくれるようになりました。
通常のブラウザとアプリの通信でもJavaScript活躍してるのですね。
ブラウザに動きをつけたり、非同期通信行う以外の時も活躍してるのですね。
もっとブラウザの仕組みや通信の仕組みについても勉強しなくてはと思いました。