質問内容・実現したいこと
実現したいこと
掲示板にAjaxにてコメント投稿ができるようになりたいです。
なぜ、このようなエラーになったのか検討もつきません。。
ご教授いただけると幸いです。
よろしくお願いします。
現状発生している問題・エラーメッセージ
NoMethodError (undefined method `save ' for #<Comment:0x00007fc2f660a728>):
どの処理までうまく動いているのか
・検証ツールにてAjax通信はできていることは確認できました。
・ パラメータに中身があることも確認できました。
ruby
1From: /Users/mark_naito/workspace/runteq/RUNTEQ_basic_level/948_mmmaaarrrkkk000_runteq_learning_basic/app/controllers/comments_controller.rb @ line 4 : 2 3 1: class CommentsController < ApplicationController 4 2: def create 5 3: @comment = current_user.comments.build(comment_params) 6 => 4: binding.irb 7 5: @comment.save 8 6: end 9 7: 10 8: def destroy 11 9: end 12 13irb(#<CommentsController:0x00007fc2f5379910>):001:0> @comment 14=> #<Comment id: nil, body: "ddd", user_id: 2, board_id: 9, created_at: nil, updated_at: nil> 15irb(#<CommentsController:0x00007fc2f5379910>):002:0> comment_params 16=> <ActionController::Parameters {"body"=>"ddd", "board_id"=>"9"} permitted: true>
該当のソースコード
< comment_controller.rb >
ruby
1class CommentsController < ApplicationController 2 def create 3 @comment = current_user.comments.build(comment_params) 4 @comment.save 5 end 6 7 private 8 9 def comment_params 10 params.require(:comment).permit(:body).merge(board_id: params[:board_id]) 11 end 12end
< comments/_form.html.erb >
ruby
1<!-- コメントフォーム --> 2 <div class="row mb-3"> 3 <div class="col-lg-8 offset-lg-2"> 4 <%= form_with model: comment, url: [board, comment] do |f| %> 5 <div class="form-group"> 6 <%= f.label :body %> 7 <%= f.text_area :body, class: 'form-control mb-3', id: 'js-new-comment-body', row: 4, placeholder: Comment.human_attribute_name(:body) %> 8 <%= f.submit '投稿', class: 'btn btn-primary' %> 9 </div> 10 <% end %> 11 </div> 12 </div>
< comments/create.js.erb >
ruby
1$("#js-table-comment").html("<%= j(render('comments/comment', comments: @comment )) %>"); 2$("#js-new-comment-body").val('')
< comments/comment.html.erb >
ruby
1<% comments.each do |c| %> 2 <tr id="comment-<%= c.id %>"> 3 <td style="width: 60px"> 4 <%= image_tag 'sample.jpg', class: "rounded-circle", size: '50x50' %> 5 </td> 6 <td> 7 <h3 class="small"><%= c.user.decorate.full_name %></h3> 8 <div id="js-comment-<%= comment.id %>"> 9 <%= simple_format(comment.body) %> 10 </div> 11 <div id="js-textarea-comment-box-<%= c.id %>" style="display: none;"> 12 <textarea id="js-textarea-comment-<%= c.id %>" class="form-control mb-1"><%= comment.body %></textarea> 13 <button class="btn btn-light js-button-edit-comment-cancel" data-comment-id="<%= c.id %>">キャンセル</button> 14 <button class="btn btn-success js-button-comment-update" data-comment-id="<%= c.id %>">更新</button> 15 </div> 16 </td> 17 18 <% if current_user.own?(c) %> 19 <td class="action"> 20 <ul class="list-inline justify-content-center" style="float: right;"> 21 <li class="list-inline-item"> 22 <a href="#" class='js-edit-comment-button' data-comment-id="<%= c.id %>"> 23 <%= icon 'fa', 'pen' %> 24 </a> 25 </li> 26 <li class="list-inline-item"> 27 <a href="#" class='js-delete-comment-button' data-comment-id="<%= c.id %>"> 28 <%= icon 'fas', 'trash' %> 29 </a> 30 </li> 31 </ul> 32 </td> 33 <% end %> 34 </tr> 35<% end %>
< boards/show.html.erb >
ruby
1<% content_for(:title, @board.title) %> 2<div class="container pt-5"> 3 <div class="row mb-3"> 4 <div class="col-lg-8 offset-lg-2"> 5 <h1><%= t('.title') %></h1> 6 <!-- 掲示板内容 --> 7 <article class="card"> 8 <div class="card-body"> 9 <div class='row'> 10 <div class='col-md-3'> 11 <%= image_tag @board.board_image.url, class: 'card-img-top img-fluid', size: '300x200' %> 12 </div> 13 <div class='col-md-9'> 14 <h3 class="d-inline"><%= @board.title %></h3> 15 <%= render 'card_menus', board: @board if current_user.own?(@board) %> 16 <ul class="list-inline"> 17 <li class="list-inline-item">by <%= @board.user.decorate.full_name %></li> 18 <li class="list-inline-item"><%= l @board.created_at, format: :long %></li> 19 </ul> 20 </div> 21 </div> 22 <%= simple_format(@board.body) %> 23 </div> 24 </article> 25 </div> 26 </div> 27 <%= render 'comments/form', { board: @board, comment: @comment } %> 28 29 <!-- コメントエリア --> 30 <div class="row"> 31 <div class="col-lg-8 offset-lg-2"> 32 <table id="js-table-comment" class="table"> 33 <%= render 'comments/comment', { comments: @comments } %> 34 </table> 35 </div> 36 </div> 37</div>
エラーから考えられる原因
試したこと
参考にしたUR
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。