Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

デプロイ後にlink_toのmethod: :deleteが効かず、投稿削除やログアウトができない

解決したいこと

AWSを使ってデプロイをして、URLを入力して作成したアプリケーションは表示することができましたが、ログアウト処理や投稿削除といった、httpリクエストがdeleteの機能もしっかり動くようにしたい。

例)
Ruby on RailsでWebアプリをつくっています。
ユーザーログアウトでエラーが出ました。
解決方法を教えて下さい。

発生している問題・エラー(log/production.logです)

ActionController::RoutingError (No route matches [GET] "/logout"):

該当するソースコード

// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require('jquery')


// Uncomment to copy all static images under ../images to the output folder and reference
// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
// or the `imagePath` JavaScript helper below.
//
// const images = require.context('../images', true)
// const imagePath = (name) => images(name, true)

自分で試したこと

railsのujsがhttpリクエストのdeleteを動作させていることを理解し、しっかり導入されているかを確認した。また本番環境にてbundle exec rails assets:precompile RAILS_ENV=productionなどのコマンドも抜かりなく実施したつもりです。何か他に考えられる原因がありましたらご教授ください。

0

2Answer

Comments

  1. @mario-qiita

    Questioner

    回答ありがとうございます!
    確かにroute.rbに該当の処理(getメソッドの/logout)を追加すれば一旦は解決するとは思うのですが、今回の問題はdeleteメソッドが動かないことで、本来ならdeleteメソッドの/logoutと認識されて欲しいところをgetメソッドの/logout として認識されてしまっているということなので、route.rbを変更するというよりかは、deleteメソッドを認識してもらえるようにしたいというのが要望です。

ログアウトボタンをクリックしたら DELTE メソッドではなく GET メソッドでリクエストが発生することを問題とされているようですね。

ログアウトボタンを実装しているVIEWがどのようになっているのかによって方法は違うかもしれませんが、 ボタン実行時の Form の method に delete を指定することで DELETEメソッドでのHTTPリクエストが投げられます。

参考URL
https://learn.co/lessons/delete-forms-rails#:~:text=%3C%25%3D%20form_tag%20person_path(%40person.id)%2C%20method%3A%20%22delete%22%20do%20%25%3E
https://stackoverflow.com/questions/65863898/rails-devise-using-post-request-for-sign-out-how-can-i-change-this-to-a-delet#:~:text=the%20home%20page.-,%3C%25%3D%20link_to%20%22Log%20Out%22%2C%20destroy_user_session_path%2C%20method%3A%20%3Adelete%2C%20%3Aclass%20%3D%3E%20%27nav-link%27%20%25%3E,-The%20NGINX%20server

また、ブラウザによってはDELETEメソッドに対応していない場合もあります。
https://discuss.hotwired.dev/t/link-to-does-not-work-with-delete-method-when-app-is-created-with-skip-javascript/1850/3#:~:text=%3Cinput%20name%3D%27_method%27%20value%3D%27delete%27%20type%3D%27hidden%27%20/%3E

0Like

Comments

  1. @mario-qiita

    Questioner

    なるほど。
    ログアウトボタンを実装しているVIEWがどのようになっているのか
    →link_toを使ってその中でmethod: :deleteを指定しています。
    そしてデプロイしたアプリケーションをデベロッパーツールで確認するとaタグにしっかりとdata-method="delete"のオプションが付いているのでlink_toには問題はなさそうです。それでも何故かgetリクエストが飛んでしまっていて困っている状態です。

Your answer might help someone💌