前提・実現したいこと
Ruby on Railsにて投稿機能アプリを作成しています。
rails7つのアクションのうち6つまでは機能するのですが削除機能だけがうまくいきません。
link_toでパスを指定しているのですがリンクボタンを押しても反応しません。
諸先輩方もし分かる方いらっしゃいましたらよろしければお力をお貸しください。
発生している問題
以下のコードでedit_post_pathのリンクは正常に作動するがdeleteのリンクは遷移がなく反応なし。
htmlhaml
1 %li.show_edit_btn 2 = link_to edit_post_path(@post.id), class: "show_edit-link" do 3 編集 4 %li.show_delete_btn 5 = link_to post_path(@post.id), method: :delete, class: "show_delete-link" do 6 削除
該当のソースコード
routes.rb
ruby
1Rails.application.routes.draw do 2 root "posts#top" 3 resources :posts 4end
posts_controller.rb
ruby
1 def edit 2 @post = Post.find(params[:id]) 3 end 4 5 def destroy 6 post = Post.find(params[:id]) 7 post.destroy 8 redirect_to posts_path 9 end
試したこと
プログラミング初心者なのでネストなどに問題があるのかと試行錯誤いたしましたが解決せず。
ネットで調べたところパスの指定の後idをつけ忘れている様なエラーの例は確認できましたがこの様な事例は見つけることはできませんでした。
サーバーの再起動実施済み。
補足情報(FW/ツールのバージョンなど)
ruby 2.5.1
rails 5.2.4
mysql2 0.5.3
ここにより詳細な情報を記載してください。
追記
削除を実行した時のコンソールログです。
console
1Started GET "/posts/9" for ::1 at 2020-05-12 15:03:40 +0900 2 (0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483 3 ↳ /Users/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.2.4.2/lib/active_record/log_subscriber.rb:98 4Processing by PostsController#show as HTML 5 Parameters: {"id"=>"9"} 6 Post Load (0.6ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 9 LIMIT 1 7 ↳ app/controllers/posts_controller.rb:34 8 Rendering posts/show.html.haml within layouts/application 9 Rendered posts/_header.html.haml (4.9ms) 10 Rendered posts/_content.html.haml (3.9ms) 11 Rendered posts/_footer.html.haml (3.0ms) 12 Rendered posts/show.html.haml within layouts/application (29.4ms) 13Completed 200 OK in 83ms (Views: 76.8ms | ActiveRecord: 0.6ms)
解決しました
####解決方法
ruby
1application.jsファイルで以下を追記 2 3//= require rails-ujs
ご指摘いただいた通りログを確認してみるとdeleteメソッドではなくgetメソッドでプログラムが動いていました。
原因はおそらくrails5.1以降のバージョンとjqueryの互換性だと思います。
jqueryをインストールしていてjsファイルにこちらの追記がないと起こってしまうのかと。
gemfile
1gem 'jquery-rails'
の様にjqueryをインストール済みでdeleteメソッドがgetになることがあるそうです。
他の例を見る限りdeviseをみなさん使用してらしたのでそこも関係あるかもしれません。
回答2件
あなたの回答
tips
プレビュー