Rails -v 5.2.4.4
.html.slimでビューを作成しています。
railsで学んだことのアウトプットとして掲示板を自作しています。
投稿(post)に対してコメント(comment)することができるフォームを下記のとおりコーディングしました。
rails
1= form_with model: [@post,@comment], local: true do |f| 2 .form-group 3 = f.label :comment 4 = f.text_area :comment, rows: 15, class: 'form-control', id: 'comment' 5 = f.submit 'コメントする', class: 'btn btn-primary'
commentsテーブルは下記のとおり、commentが空の場合に保存できないように指定しています。
rails
1 create_table "comments", force: :cascade do |t| 2 t.bigint "post_id" 3 t.bigint "user_id" 4 t.text "comment", null: false 5 t.datetime "created_at", null: false 6 t.datetime "updated_at", null: false 7 t.index ["post_id"], name: "index_comments_on_post_id" 8 t.index ["user_id"], name: "index_comments_on_user_id" 9 end
ですが、text_areaを空の状態で送信しても保存が完了してしまいます。
原因を探るために、binding.pryにてコンソールから確認したところ、
console
1 10: def create 2 11: @comment = current_user.comments.new(comment_params) 3 12: @comment.post_id = params[:post_id] 4 => 13: binding.pry 5 14: if @comment.save 6 15: redirect_to post_url(@comment.post) 7 16: else 8 17: render :new 9 18: end 10 19: end 11 12[1] pry(#<CommentsController>)> @comment 13=> #<Comment:0x00007ff870cf9e80 id: nil, post_id: 64, user_id: 7, comment: "", created_at: nil, updated_at: nil>
上記のとおり、空で送信したのにcommentに””が格納されているため、保存できてしまうことが判明しました。
問題を解決するためにtext_areaの初期値設定についてネット記事を調べてみましたが、参考になる記事が見つからず。
初期値として、value: ""や、value: nil 等指定しても、結果は同じでした。
タイトルに戻りますが、
text_areaで入力が空で送信された場合に保存が回避したいです。
commentをnilとして扱うためにはどのような処理が必要になるでしょうか。ご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/21 07:17
2020/09/21 08:21
退会済みユーザー
2020/09/22 01:41