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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1041閲覧

コメント機能実装の際にデータが格納されない

Laugh

総合スコア11

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/26 17:59

学校でつかう課題管理サイトを作成しています。

Qiitaを参考にしながら作成していたコメント機能ですが、データだけが格納されません。ログを見るとそれぞれの値は取得できているみたいなのですがなぜかbigin transaction の直後にrollbackされています。

ソースは下記で、Qiitaの記事ではrailsのバージョンが5.2系なので使えないメソッドなどを使ってエラーになっているのではないかと踏んでいますが自分ではわかりませんでした。

試したこと:
コンソールの方でデータを作成したら無事登録できました。入力した値は
comment_content,homework_id,user_idの3つです。

作成したコメントはきちんとshowの方でも反映されていました。

何か値が足りないのではないかと思い、show.html.erbのソースにもある通りhidden_field_tagでhomework_idの値とuser_idの値を取得していますが変化なしでした。

なにか少しでもわかることがあれば教えていただきたいです。
足りないソースなどあればすぐに追加します。

routes
homework_comments POST /homeworks/:homework_id/comments(.:format) comments#create

schema.rb

ruby

1create_table "comments", force: :cascade do |t| 2 t.text "comment_content" 3 t.integer "user_id" 4 t.integer "homework_id" 5 t.datetime "created_at", null: false 6 t.datetime "updated_at", null: false 7 t.index ["homework_id"], name: "index_comments_on_homework_id" 8 t.index ["user_id"], name: "index_comments_on_user_id" 9 end

homeworks_controller

ruby

1class HomeworksController < ApplicationController 2. 3. 4. 5def show 6 @comments = @homework.comments 7 @comment = Comment.new 8 end 9. 10省略 11. 12

comments_controller

ruby

1class CommentsController < ApplicationController 2 def create 3 @comment = Comment.new(comment_params) 4 @comment.user_id = current_user.id 5 6 if @comment.save 7 redirect_back(fallback_location: root_path) 8 else 9 redirect_back(fallback_location: root_path) 10 end 11 end 12 13 private 14 def comment_params 15 params.require(:comment).permit(:comment_content, :homework_id) 16 end 17end

show.html.erb

html

1 <%= form_for [@homework, @comment] do |c| %> 2 <%= c.text_field :comment_content, class: 'form-control'%> 3 <%= hidden_field_tag "homework_id", @comment.homework_id %> 4 <%= hidden_field_tag "user_id", @comment.user_id %> 5 <%= c.submit "コメント送信", class:'btn btn-success float-right mt-3'%> 6 <% end %> 7 8 <% @comments.each do |comment| %> 9 <%= comment.comment_content %> 10 <% end %>

development.log

log

1Started POST "/homeworks/1/comments" for ::1 at 2020-08-27 02:22:30 +0900 2Processing by CommentsController#create as HTML 3 Parameters: {"utf8"=>"✓", "authenticity_token"=>"gtjv21xMCmfyzBD3i3GndwQZyGwACxIHFywRP+xZbfLWZrXOgckCqhskk5qyyhycSslJPRRTj3a2b2CyCkFcbg==", "comment"=>{"comment_content"=>"gaerga"}, "homework_id"=>"1", "user_id"=>"1", "commit"=>"コメント送信"} 4 User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]] 5  (0.1ms) begin transaction 6  (0.1ms) rollback transaction 7Redirected to http://localhost:3000/homeworks/1 8Completed 302 Found in 6ms (ActiveRecord: 0.5ms)

rails 5.0.7.2
ruby 2.6.5

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

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

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

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

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

guest

回答1

0

ベストアンサー

@comment.errors.messages をみると確認できますが、おそらくhomework_idが入っていないのでしょう。
Comment は belongs_to :homework ですよね?
homework_id は paramsにありますがよく見てください comment => {}の外ですよね。ですので comment_params に入りません
hidden_field_tag "homework_id"c.hidden_field "homework_id"に。

投稿2020/08/26 23:40

winterboum

総合スコア23567

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

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

Laugh

2020/08/27 04:04

回答ありがとうございます。おかげで解決しました。 <%= c.hidden_field :homework_id, value: @homework_.id%> でcomment => {} の中にhomework_idを入れることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問