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

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

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

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

Ruby

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

Q&A

1回答

909閲覧

[RubyonRails]コメント機能実装で、saveができません。

390

総合スコア13

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2020/03/25 11:46

前提・実現したいこと

RubyonRailsにおいて、
food、user、commentモデルの実装でcommentのcontentカラムを保存したいです。

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

ログを見ても、保存ができておらず、解決策に困っています。
わかる方、いらっしゃいましたらアドバイスいただきたいです。

よろしくお願いいたします。

該当のソースコード

log

1Started POST "/foods/3/comments" for ::1 at 2020-03-25 20:33:04 +0900 2Processing by CommentsController#create as HTML 3 Parameters: 4{ 5 "authenticity_token" => "bm931f87IA3T5H8cBDIbBMBYwp5jx26e2pHa8Nf/INm1ouKzH/0lTClEmHK83VfBaVSgwhFID+I2Qsoy/o5NRw==", 6 "comment" => { 7 "content" => "美味しい" 8 }, 9 "commit" => "コメントする", 10 "food_id" => "3" 11} 12 User Load (0.8ms) 13 SELECT 14 `users`. * 15 FROM 16 `users` 17 WHERE 18 `users`.`id` = 5 LIMIT 1 19 ↳ app/helpers/sessions_helper.rb:7:in `current_user' 20 CACHE User Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 5 LIMIT 1 [["id", 5], ["LIMIT", 1]] 21 ↳ app/controllers/comments_controller.rb:6:in `create' 22Redirected to http://localhost:3000/foods 23Completed 302 Found in 19ms (ActiveRecord: 0.9ms | Allocations: 10029)

foods/show.htm.erb

<h4>投稿詳細ページ</h4> <%=@food.name%> <%=@food.description%> <h4>コメント欄</h4> <%form_with%> <%=%> <%=%> <br> <h4>食品に対するコメント一覧</h4> <%@comments.each do |c|%> <%=c.content%> <%end%> <br> <h4>コメント</4> <%=form_with model:[@food, @comment],local: true do |f|%> <%= f.text_field :content %> <br> <%= f.submit 'コメントする' %> <%end%>

comments.controller.rb

class CommentsController < ApplicationController def create @comment = Comment.new(comment_params) @comment.user_id = current_user.id if @comment.save redirect_to food_url else redirect_to foods_url end end def destroy end private def comment_params params.require(:comment).permit(:content) end end

foodsController.rb

class FoodsController < ApplicationController before_action :require_user_logged_in def index @foods = Food.all end def show @food = Food.find(params[:id]) @comments = @food.comments @comment = Comment.new end def new @food = Food.new end def create @food = current_user.foods.build(food_params) @food.user_id = current_user.id if @food.save redirect_to foods_url else render :new end end private def food_params params.require(:food).permit(:name,:description) end end

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

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

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

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

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

guest

回答1

0

foodとcommentのclass定義が無いので想像ですが、
おそらく commentはfood_id、user_idが必須になっていると思います。
しかし

def create @comment = Comment.new(comment_params) @comment.user_id = current_user.id

では food_idが渡りません。
今のviewの構造でしたら
params.require(:comment).permit(:content).merge(food_id: params[:food_id])
かな。
params.require(:comment).permit(:content).merge(params.permit(:food_id))
まではしないでも良いだろうと思います。
contentの入力と同じ階層に hidden で food_idを入れておくのがスマートかも

投稿2020/03/26 02:33

winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問