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

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

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

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

Q&A

10回答

857閲覧

Rails 投稿に紐づくコメントが削除できない

ryusei1212

総合スコア0

Ruby on Rails 7

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

0グッド

0クリップ

投稿2023/03/03 02:42

編集2023/03/03 02:46

実現したいこと

投稿に紐づくコメントを削除したいです。

前提

railsでコメント機能を作成しています。

発生している問題・エラーメッセージ

定番のメッセージなのですが

undefined method `destroy!' for nil:NilClass

該当のソースコード

ruby

1 scope module: 'users' do 2 resources :posts, except: %i[index new] do 3 resources :comments, module: :posts, only: %i[create destroy] 4 end 5 end

ruby

1class Users::Posts::ApplicationController < Users::ApplicationController 2 before_action :set_post 3 4 private 5 6 def set_post 7 @post = Post.find(params[:post_id]) 8 end 9end

ruby

1class Users::Posts::CommentsController < Users::Posts::ApplicationController 2 3 def destroy 4 comment = current_user.comments.find_by(id: params[:id]) 5 comment.destroy! 6 redirect_to post_path(@post), alert: 'コメントを削除しました' 7 end 8 9 private 10 11 def comment_params 12 params.require(:comment).permit(:content) 13 end 14end

ruby

1- comments.each do |comment| 2 .card.w-50.mx-auto.my-3 3 .card-header 4 = "#{comment.user.name}さんのコメント" 5 .card-body 6 = comment.content 7 - if comment.user == current_user 8 = link_to post_comment_path(comment), data: { turbo_method: :delete, turbo_confirm: '本当に削除しますか?' }, class: 'text-reset ms-auto' do 9 %i.bi.bi-trash

viewに関してはパーシャルにしているので@commentsではなくcommentsになっています

試したこと

最初はcomment = current_user.comments.find(params[:id])という記述で書いていたのですがこれだとレコードが見つからないというエラーになったので、find_byで試したところcommentがnilになっていて、結局どうすればいいのかわからなくなってしまいました。

補足情報(FW/ツールのバージョンなど)

ruby 3.1.3
Rails 7.0.4

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

maisumakun

2023/03/03 03:50

commentはuserとpostのどちらに紐づいているのでしょうか?
ryusei1212

2023/03/03 03:53 編集

記載が漏れていましたが、どちらにも紐づいています。 class Comment < ApplicationRecord belongs_to :user belongs_to :post end
guest

回答10

0

If you're looking for a hassle-free way to get your favorite tunes in MP3 format, look no further. "Convertidor MP3" is a must-have for any music enthusiast!

投稿2023/11/17 15:40

john3

総合スコア2

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

Sweardle is a word game that's as addictively challenging as it is fun! It's a refreshing twist on the classic word puzzle genre, offering a unique and exciting gameplay experience.

投稿2023/11/02 14:38

john3

総合スコア2

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

Disney Wordle is a magical journey through the world of words and beloved Disney characters. It's an enchanting twist on the classic word game that every Disney fan will adore.

投稿2023/10/30 16:53

beinfomist

総合スコア2

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

Disney Wordle is a magical journey through the world of words and beloved Disney characters. It's an enchanting twist on the classic word game that every Disney fan will adore.

投稿2023/10/30 16:51

beinfomist

総合スコア2

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

Because you are viewing an older version of the page, the comment may still appear. We are aware of the problem and are working to resolve it. Keep in mind that you can only delete your own connections game comments or comments on your own post. You cannot delete someone else's comments on a post that is not yours.

投稿2023/10/25 16:08

andreaa23

総合スコア6

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

The comment may still appear because you're viewing an old version of the page. We're aware of this connections issue and are working on a fix.

投稿2023/10/18 03:54

Connections

総合スコア4

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

The comment may still appear because you're viewing an old [connections](https://connectionsnyt.com/ version of the page. We're aware of this issue and are working on a fix.

投稿2023/10/18 03:52

Connections

総合スコア4

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

Rails の投稿に関連するコメントの削除は、通常、Rails アプリケーションのコントローラーとアクションを使用して行われます。 aa route planner

投稿2023/10/10 01:20

emmausa

総合スコア8

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

最終的に以下のように実装しました。

ruby

1 resources :posts, except: %i[index new] do 2 resources :comments, module: :posts, only: %i[create update destroy], shallow: true 3 end

ruby

1class Users::Posts::CommentsController < Users::Posts::ApplicationController 2 skip_before_action :set_post, only: :destroy 3 4 def destroy 5 comment = Comment.find(params[:id]) 6 post = comment.post 7 comment.destroy! 8 redirect_to post_path(post), alert: 'コメントを削除しました' 9 end 10end

他にいい方法がありましたらコメントお願いします。

投稿2023/03/03 07:03

ryusei1212

総合スコア0

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

ルーティングをネストしているので、post_comment_pathには、postcommentの2つを指定する必要があります。1つしか指定していない結果、正しい値が送られなくなっています。

とはいえ、commentがどれかわかれば削除はできますので、postは冗長です。このような場合、ルーティングでshallow: trueと指定すると、commentがすでに存在するshoweditdestroyなどでcomment側のidだけを含んでルーティングを引くようになります。

投稿2023/03/03 03:57

maisumakun

総合スコア144634

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

ryusei1212

2023/03/03 04:18

コメントありがとうございます。 > postとcommentの2つを指定する必要があります。1つしか指定していない結果、正しい値が送られなくなっています。 comment = @post.comments.find_by(id: params[:id]) 上記記述でも同じ様にエラーが起こるのですが、投稿に紐づくコメントの中から、pramasで受け取ったidをもとにコメントを特定して削除するというのなぜできないのかが、腑に落ちていません。
ryusei1212

2023/03/03 04:33

すいません、わすれてください。解決できそうです。
ryusei1212

2023/03/03 07:04

maisumakunさんありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.59%

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

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

質問する

同じタグがついた質問を見る

Ruby on Rails 7

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