コメント機能を現在実装していて、設定したバリデーションを超えてコメントするとエラーが出てしまいます。
エラー内容は以下の通りです。
ActionController::UrlGenerationError in Comments#create Showing /app/app/views/posts/show.html.erb where line #137 raised: No route matches {:action=>"destroy", :controller=>"comments", :id=>nil, :post_id=>"8"}, missing required keys: [:id]
なお、自分の書いたコードは以下の通りです。
---comment.rb--- class Comment < ApplicationRecord belongs_to :user belongs_to :post validates :content, presence: true, length: { maximum:255 } end
---show.html.erb--- <!--コメントフォーム--> <%= form_with(model: [@post, @comment], local: true) do |f| %> <div class="comment-form"> <%= f.label :content, 'コメント' %> <%= hidden_field_tag :post_id, @post.id %> <%= f.text_area :content, class: 'comment-form-control' %> <%= f.submit 'コメントする', class: 'comment-btn btn' %> </div> <% end %> <!--投稿削除ボタン--> <% @post.comments.each do |comment| %> <% if current_user == comment.user %> <div class="comment-delete btn"> <!--以下がエラーの原因となっている137行目になります。--> <%= link_to 'コメントを削除する', post_comment_path(@post, comment), method: :delete, data: { confirm: '本当に削除してよろしいでしょうか?' } %> </div> <% end %> <% end %>
---posts_controller.rb--- class PostsController < ApplicationController def show @post = Post.find(params[:id]) @user = @post.user @comment = Comment.new counts(@post) end end
---comments_controller.rb--- class CommentsController < ApplicationController def create @post = Post.find(params[:post_id]) @comment = @post.comments.build(comment_params) @comment.user_id = current_user.id if @comment.save flash[:notice] = 'コメントしました。' redirect_to @post else flash[:notice] = 'コメントに失敗しました。' render template: "posts/show" end end def destroy @post = Post.find(params[:post_id]) comment = @post.comments.find(params[:id]) @comment.destroy flash[:notice] = 'コメントを削除しました。' redirect_to @post end end
Rails.application.routes.draw do ---routes.rb--- #posts GET /posts(.:format) posts#index # POST /posts(.:format) posts#create #new_post GET /posts/new(.:format) posts#new # post GET /posts/:id(.:format) posts#show # DELETE /posts/:id(.:format) posts#destroy #post_comments POST /posts/:post_id/comments(.:format) comments#create #post_comment DELETE /posts/:post_id/comments/:id(.:format) comments#destroy resources :posts, only: [:index, :show, :new, :create, :destroy] resources :posts do resources :comments, only: [:create, :destroy] end end
エラー内容から、「comments_controller.rbに記載されているdestroyメソッドの中のcommentのidがない」と読み取れるますが解決方法が分かりません。ご教示いただけたら幸いです。
よろしくお願いします。
追記
エラーの原因となっている137行目は以下の部分です。
---app/views/posts/show.html.erb where line #137--- <%= link_to 'コメントを削除する', post_comment_path(@post, comment), method: :delete, data: { confirm: '本当に削除してよろしいでしょうか?' } %>
よろしくお願いいたします。
Showing /app/app/views/posts/show.html.erb where line #137 raised:
この137行目ってどの行?
ご回答ありがとうございます。
Showing /app/app/views/posts/show.html.erb where line #137 raised:は
<%= link_to 'コメントを削除する', post_comment_path(@post, comment), method: :delete, data: { confirm: '本当に削除してよろしいでしょうか?' } %>
のコメント削除ボタンの部分になります。
エラー原因につきまして、ご教示いただけたら幸いです。
よろしくお願いいたいします。
回答1件
あなたの回答
tips
プレビュー