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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

4909閲覧

Ruby on Railsにて削除機能が実装できない

tak-fomalhaut

総合スコア1

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/05/12 05:28

編集2020/05/12 10:03

前提・実現したいこと

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をみなさん使用してらしたのでそこも関係あるかもしれません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatsu

2020/05/12 05:40

削除ボタンを押した時のログなどがあれば追記していただけると参考になるかもです!
tak-fomalhaut

2020/05/12 06:08

お返事ありがとうございます。 コンソールログ追記させていただきました。 よろしくお願いします。
guest

回答2

0

ベストアンサー

コンソールログをみると、 delete method ではなく
get method で動いているので、
PostsControllerのshowが呼ばれているようです。

haml部分に、link_to に method deleteと記述しているが、
railsのjqueryなどの影響により、getになっている状態かと思われます。

「rails link_to delete」とかで調べますと、解決につながるかと思います。

参考URL: link_to deleteメソッドがGetメソッドで送られる。

投稿2020/05/12 08:58

fshun

総合スコア261

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tak-fomalhaut

2020/05/12 09:50

的確なアドバイスとヒントありがとうございました。 おかげさまで解決いたしました。 開発のはじめに今後使うであろうgemなど一気にインストールしてしまった弊害が出てしまったようです。 今後は必要になった都度インストールして原因を絞れる様に気をつけます。 また、ログの確認方法が未熟で原因を教えてくれていたのを気付きませんでした。 本当にありがとうございました。
fshun

2020/05/12 09:52

無事解決できて、よかったです ????‍♂️
tak-fomalhaut

2020/05/12 10:05

本当にありがとうございました☺️
guest

0

これらのコードであれば、削除ボタンを押した場合に実際にデータ自体は
削除されていると思うのですが、確認はされていますか?

ちゃんとpostsテーブルからデータが削除されている前提でお話をさせていただくと、
まず最初に確認をしたいのが一番上に書かれているコードです。
これはどのビューファイルに書かれてるのでしょうか?

もしもこれがview/posts/index.html.hamlに書かれているのであれば、
Controllerのdestroyアクションでデータ削除が完了した後にリダイレクトした先が
index.html.hamlに飛ぶように書かれているようなので、
画面遷移していないように見えるかと思います。

また、もしこれがview/posts/index.html.hamlではなくて、
データは削除されていることが確認とれるのであればリダイレクトの部分で何か問題があるのかと思います。

投稿2020/05/12 08:57

gnfreeworks

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gnfreeworks

2020/05/12 09:22

すみません、削除時のコンソールログちゃんと見てませんでした。 他の方がおっしゃるとおり、GETメソッドで飛んでるのが原因かと思います。 一応、私の環境下で上記のコードをコピペして実行したところちゃんとデータは削除され、 リダイレクトもされてたので何かしらの原因でDELETEメソッドで飛んでないようです。
tak-fomalhaut

2020/05/12 09:51

わざわざテストまでしていただきありがとうございました。 おっしゃる通りGETになっていたのが原因でした。 ログの確認方法が未熟でご迷惑おかけしました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問