前提
初めての質問で至らない点あるかと思いますが、よろしくお願い致します。
Rails7で、ランサーズのような仕事をして欲しい人と仕事をしたい人のマッチングサービスを作っており、その中でユーザー同士のメッセージの削除機能を作ろうとしています。
モデル同士の関係としては、ユーザーに複数のプロジェクトが紐付き(一対多)、さらにそのプロジェクトに複数のメッセージが紐付いて(一対多)います。
プロジェクトの詳細画面の中で、ユーザー同士がメッセージのやり取りをできるようにしているのですが、メッセージの削除機能が上手くいかず困っています、、
実現したいこと
プロジェクト詳細画面内で行われるメッセージ機能で、メッセージの削除をできるようにしたい。
発生している問題・エラーメッセージ
プロジェクト詳細画面"projects#show"に表示されるメッセージ一覧の中で、link_toを使って"messages#destroy"に飛ばし、メッセージの削除を試みているのですが、上手く削除されません。
また、ブラウザ上にエラーメッセージは出ておらず、削除ボタンを押す→「削除してもよいですか?」というポップアップに「OK」を選択、として削除しようとしても、ブラウザが更新されていないように見えます。
その際、ターミナルには以下のように表示されます。
(idが1のメッセージを削除しようとした場合)
尚、ルーティングではshallowを用いているため、":user_id"や":project_id"は必要ないと考え、パスはmessage_path(message)にしています。
terminal
1Started DELETE "/messages/1" for <IPアドレス> at 2022-11-20 08:52:43 +0000 2Processing by MessagesController#destroy as TURBO_STREAM 3 Parameters: {"id"=>"1"} 4 Rendering layout layouts/application.html.erb 5 Rendering messages/destroy.html.erb within layouts/application 6 Rendered messages/destroy.html.erb within layouts/application (Duration: 0.0ms | Allocations: 7) 7 Rendered layout layouts/application.html.erb (Duration: 6.9ms | Allocations: 2424) 8Completed 200 OK in 11ms (Views: 9.9ms | Allocations: 3115)
該当のソースコード
projectのshowビュー(メッセージ一覧箇所)
1<% @project.messages.order(id: "desc").each do |message| %> 2 <%= message.user.advisor_1_nickname %><br> 3 <table> 4 <tr> 5 <td width="20px"><%= "#{message.id}." %></td> 6 <td width="300px"><%= message.content %></td> 7 <td width="200px"><%= l message.created_at, format: :short %></td> 8 <td> <%= link_to "削除", message_path(message), data:{turbo_method: "delete", turbo_confirm: "削除してよろしいですか?"} %> </td> 9 </tr> 10 </table> 11<% end %>
projects#show
1def show 2 @project = Project.find(params[:id]) 3 @message = Message.new 4end
messages#destroy
routes.rb
1Rails.application.routes.draw do 2 3 resources :users, shallow: true do 4 collection do 5 get :login, action: :login_form 6 post :login 7 post :logout 8 end 9 resources :projects, shallow: true do 10 resources :messages, except:[:show] 11 end 12 end 13 14end
message.rb
project.rb
1class Project < ApplicationRecord 2 belongs_to :advisor, class_name: "User", foreign_key: :advisor_id 3 belongs_to :client, class_name: "User", foreign_key: :client_id 4 5 has_many :messages, foreign_key: :project_id 6 7end
試したこと
link_toから"messages#destroy"に飛んでいるかを確かめるために、destroyアクション内をシンプルに"redirect_to users_path"としてユーザ一覧へのリダイレクトにしても、ユーザ一覧ページには遷移せず、パスが通っていないのではと疑っています。(真相は分かりませんが、、)
methodがdeleteになっていないのでは?等も考えましたが、ターミナルを見ると「Started DELETE "/messages/1"」となっているので、そこが問題ではないのか…?と色々調べてみたものの数時間解決せず、質問させていただきます。
最後に
自分なりに試行錯誤し、パスが通っていないのでは?と思っていますが、プログラミング初心者ということもあり原因/対処法がわからず、ご教示いただけますと幸いです。よろしくお願い致します。
あなたの回答
tips
プレビュー