🌒
Form Objectのバリデーションについて
疑問点
Form Objectを使っていないときは、saveをif文の条件にするとちゃんとエラーを出せたのに、
Form Objectを使ったときはifの条件にsaveを使ってもエラーを吐かない。
いつバリデーションしてるの?
そもそもいつバリデーションされているのか、あまり考えていなかったので調べてみました。
以下のメソッドではバリデーションがトリガされ、オブジェクトが有効な場合にのみデータベースに保存されます、ということでした。
https://railsguides.jp/active_record_validations.html
- create
- create!
- save
- save!
- update
- update!
あれ?おかしくない?
saveでバリデーションしてるなら、Form Objectを使ってるときでもvalid?使わなくてもエラーを吐いてくれるはずじゃないか?
と思い、if文の条件式をsaveでしたものとvalid?にしたもので試して中身を確認したところ...
エラーが出てませんでしたー
なぜかsaveしてもバリデーションされてないという。。
結論
つまり、Form Objectを使っている場合はsaveをしてもバリデーションのトリガとならないということだと知りました。(なんでやねん)
また、いくつかの記事を見た感じ、Form Objectの中にあるsaveの中にif invalid?を入れることが多いみたいでした。(確かにソッチのほうがスマートだ...)
とりあえず今日はここまで!
Discussion