最近Railsの学習を始めたのですが、ログアウト機能を実装していた際にハマったので、メモとして残します。
#問題の概要
railsのlink_toメソッドを使って、以下のようにログアウト用のリンクを実装しました。
<%= link_to 'ログアウト', logout_path, method: :delete, class: 'nav-link' %>
method: :delete として、HTTPメソッドをDELETEに指定しているのですが、なぜか最終的にGETになってリクエストが送られるという現象に遭遇しました。
ちなみにlink_toメソッドを使って生成されたHTMLのソースを確認したところ
<li class="nav-item">
<a class="nav-link" rel="nofollow" data-method="delete" href="/logout">ログアウト</a>
</li>
となっており、きちんとaタグでdata-method="delete"となっていました。
#解決法
いろいろと情報を探っていると、RailsではJavaScriptを使って、サーバーにリクエストを送信することもあるようです。
なので、JavaScriptを導入できていなかった場合に上記のようなHTTPメソッドのerrorが起こってくるようです。
自分の場合、Webpackerを導入しようとしていて、どこかで、手順の漏れがあったようです。
結局、現在制作中のアプリ(Rails学習のため作成)にはWebpackerを導入する必要性がなさそうだったので、Rails newを実行した時にデフォルトで記載されていた、以下の記述に戻して
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
app/asset/config内のapplication.jsに以下の記述を追加するとしっかりとDELETEでリクエストが送信できました。
//= require jquery
//= require jquery_ujs