はじめに
今回はrailsでsave時にrollbackする原因がわからないときの対処について学習してきます。
現在ユーザーがメモを登録できるサイトを作成中。
今回やりたい事
fromから登録(note)を送ってDBに保存(ユーザーに紐づいた)してviewに表示させる
苦戦したところ
登録した際にrollbackしてしまう。
@note.save!と記述すると下記のエラーが出たので検索
ActiveRecord::RecordInvalid: Validation failed: User must exist
要約するとuserモデルに値が入ってなくてバリデーションで弾かれていたみたい
解決策
optional: trueを記載
note.rb
class Note < ApplicationRecord
belongs_to :user,optional: true
validates :title, presence: true
validates :explanation, presence: true
end
optional: trueとはなにか?
Railsのbelongs_toに指定できるoptional: trueとは?
belongs_toの外部キーのnilを許可するというもの
参考
しかし、
rollbackは解消されたが投稿したタイトルが全部0で表示されてしまいす。
原因
マイグレーションファイルのtitleのデータ型がintegerになっていたからでした。
text型に直してrails db:migration:reset
をして解決!