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

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

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

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1048閲覧

Ajax通信でコメントを投稿をしたい

mmmaaarrrkkk000

総合スコア16

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2021/07/05 09:25

質問内容・実現したいこと

実現したいこと

掲示板に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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

def create @board = Board.find(params[:board_id]) @comment = @board.comments.build(comment_params) @comment.user_id = current_user.id @comment.save end

投稿2021/07/06 01:49

mmmaaarrrkkk000

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問