RailsのActiveRecordにはDBの正しいデータだけを保存するためにバリデーションを行うための機能がああります。
通常はmodelにてバリデーションを実装するが、発火するタイミング、シチュエーションが曖昧だったので改めて調べてみました。
バリデーションが発火するタイミング
バリデーションはモデルを作成したから行われるわけではありません。
「通常はSQLのデータベースへの送信前に行うもの」です。railsで何かしらのクエリを発行して、SQが生成され、DBへの保存が行われるタイミングでバリデーションが発火します。
バリデーションが発火するシチュエーション
では、バリデーションはどのクエリを発行したら実行されるのでしょうか。Rails Guideでは以下のメソッド実行時にベリデーションが発火すると明記されています。
- create
- create!
- save
- save!
- update
- update!
railsのクエリには他にも様々ありますが「上記のメソッドを仕様したときだけバリデーションが走る!!」と覚えておけばわかりやすいですね。
以下のようにsaveメソッドに引数を与えるとバリデーションをスキップすることができます。
save(validate: false)
ついでに
バリデーションが行われないメソッドを記載しておきます。
以下のメソッド使用時にはバリデーションは行われないため、注意しましょう。
- decrement!
- decrement_counter
- increment!
- increment_counter
- insert
- insert!
- insert_all
- insert_all!
- toggle!
- touch
- touch_all
- update_all
- update_attribute
- update_column
- update_columns
- update_counters
- upsert
- upsert_all
以上です。