5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

バリデーションが発火するタイミングについて

Last updated at Posted at 2022-07-31

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

以上です。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?