前提・実現したいこと
現在railsにてトークルームにてチャットが出来るアプリを製作中です。
基本的な機能は問題なくできておりますがマイページでの削除機能が上手く機能していません。
削除しようとしているのはtalk_post_roomsテーブルに保存されている、トークをする為の部屋のデータです。
それに紐づく usersテーブル、talk_postsテーブル、categoriesテーブル、faboritesテーブルを同時に削除するように、
それぞれdependent: :destroyをrbファイルにて付けてあります。
発生している問題・エラーメッセージ
削除ボタンを押すとメッセージを削除しました。ときちんとリダイレクトされるのですが、 実際にはマイページに載せてる一覧自体が残ってしまっており、何度削除ボタンを押しても消えずに残ってしまってる状態です。 関係あるかは不明ですが、デベロッパーツールにて削除ボタンを押した後に、 Networkを見ると、削除ボタンが関わってるであろうファイルが302とステータスがなっています。
該当のソースコード
rails
1 2talk_post_roomsコントローラ 3def destroy 4 @talk_post_room = TalkPostRoom.find(params[:id]) 5 @talk_post_room.destroy 6 flash[:success] = 'トークルームを削除しました。' 7 redirect_to user_path(current_user) 8 end 9 10users/show.html.erb 11<%= link_to "削除", talk_post_room_path(@talk_post_room), method: :delete, data: { confirm: "本当に削除しますか?" }, class: 'btn btn-danger btn-sm' %> 12
試したこと
ルーティングの順番がおかしいのかと思い、
・get 'talk_post_rooms/destroy'を一番上に配置し別のルーティングにより阻害されていないかの確認。 ・talk_post_roomのidが上手く渡っていないのかと思い。確認のためデベロッパーツールのHTMLを確認。 <a data-confirm="本当に削除しますか?" class="btn btn-danger btn-sm" rel="nofollow" data-method="delete" href="/talk_post_rooms/1">削除</a> idはどうやらしっかりと渡っている模様。 dependent: :destroyで出来ていないところがあるかのチェックをしたが、コードを削除してみたりして試すが、 そもそも出来ていないとエラーが出たので、出来てると確認。 ・rails routesでルーティング確認。 DELETE /talk_post_rooms/:id(.:format) talk_post_rooms#destroy HTMLと一致してるので問題なし。 ・binding.pryにてデバックで確認。 [4] pry(#<TalkPostRoomsController>)> @talk_post_room.destroy (0.4ms) BEGIN ↳ (pry):4 TalkPostRoomPost Load (0.2ms) SELECT `talk_posts`.* FROM `talk_posts` WHERE `talk_posts`.`talk_post_room_id` = 1 ↳ (pry):4 TalkPost Destroy (0.2ms) DELETE FROM `talk_posts` WHERE `talk_posts`.`id` = 1 ↳ (pry):4 (2.4ms) ROLLBACK ↳ (pry):4 => false talk_postsのidが取得出来ず、RoLLBACKになっているのでしょうか? dependent: :destroyによって紐づいてるものを削除できるので、 この記述だけで問題ないと思ったのですが、 def destroy @talk_post_room = TalkPostRoom.find(params[:id]) @talk_post_room.destroy flash[:success] = 'トークルームを削除しました。' redirect_to user_path(current_user) end @talk_post_roomにtalk_post_id を入れて上げないとダメなのでしょうか? @talk_post = TalkPost.find(params[:id])でidを取得して、 @talk_post_room.talk_post_id = @talk_post.id としてidを入れて上げようとするとtalk_postのメソッドエラーとなります。 @talk_post_rooms = @talk_post_room.talk_posts とするとエラーは出ませんが、やはりルームを削除しました。と出るだけでusers/showに表示している削除したものは消えておりません。 どこを修正すれば良いのかが、検討も付かなくなっている状態です。 何かアドバイスを頂けると有り難いです。よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
AWSのC9にてコードを書いています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/12 08:14