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

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

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

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

0回答

296閲覧

【初心者】ネストしているメッセージの削除が上手く機能しない

masayanp

総合スコア0

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2022/11/20 13:14

編集2022/11/20 13:18

前提

初めての質問で至らない点あるかと思いますが、よろしくお願い致します。

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

1def destroy 2 @message = Message.find(params[:id]) 3 @project = @message.project 4 @message.destroy 5 redirect_to @project, status: :see_other 6end

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

1class Message < ApplicationRecord 2 belongs_to :project, foreign_key: :project_id 3 belongs_to :user, foreign_key: :user_id 4 validates :project_id, presence: true 5 validates :user_id, presence: true 6 validates :content, presence: true, length: {maximum: 1000} 7end

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"」となっているので、そこが問題ではないのか…?と色々調べてみたものの数時間解決せず、質問させていただきます。

最後に

自分なりに試行錯誤し、パスが通っていないのでは?と思っていますが、プログラミング初心者ということもあり原因/対処法がわからず、ご教示いただけますと幸いです。よろしくお願い致します。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問