railsで、特定の投稿に対してコメントできる機能を実装し、バリデーションの制限を超えると件名のエラーが出てしまい解決方法を見つけられなかったためご教示いただきたいです。
エラー内容は以下の通りです。
NoMethodError in Comments#create Showing /app/app/views/posts/show.html.erb where line #94 raised: undefined method `any?' for nil:NilClass
なお、自分の書いたコードは以下の通りです。
---posts/show.html.erb--- <% if @comments.any? %> <ul class="comment-index"> <% @comments.each do |comment| %> <li class="comment-post"> <!--投稿内容--> <div class="comment-content"> <p> <%= safe_join(comment.content.split("\n"), tag(:br)) %> </p> <!--投稿削除ボタン--> <% if current_user == comment.user %> <div class="comment-delete btn"> <%= link_to 'コメントを削除する', post_comment_path(@post, comment), method: :delete, data: { confirm: '本当に削除してよろしいでしょうか?' } %> </div> <% end %> </div><!--ここまでがcomment-content--> </li> <% end %> </ul><!--ここまでcomment-index--> <% end %>
---comment.rb--- class Comment < ApplicationRecord validates :content, presence: true, length: { maximum: 255 } belongs_to :user belongs_to :post end
---comments_controler.rb--- class CommentsController < ApplicationController def create @post = Post.find(params[:post_id]) @comment = @post.comments.new(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
---posts_controller.rb--- class PostsController < ApplicationController def show @post = Post.find(params[:id]) @user = @post.user @comments = @post.comments @comment = Comment.new counts(@post) end end
comment.rbに記載したとおり、Commentsテーブルのcontentカラムには1文字以上255文字以下でしか保存されない旨、validationを設定しました。このvalidationを超えると当エラーが出てしまいます。
原因をつきとめられなかったため、ご教示いただけたら幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/05 22:32