0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Railsのバリデーション – presence / allow_nil / allow_blank の違い・役割の整理

Posted at

presence

値が空の場合にバリデーションエラーを起こす。

presence
このヘルパーは、指定された属性が空(empty)でないことを確認します。値がnilや空文字でない、つまり空でもなければホワイトスペースでもないことを確認するために、内部でObject#blank?メソッドを使っています。

例:

validates :foo_column, presence: true,

allow_nil

値がnilの場合にバリデーションをスキップする。

例:

validates :foo_column, format: { with: /REGEXP/ }, allow_nil: true

あくまで役割は「バリデーションのスキップ」なので、これを指定したからと言って値にNULLを許可するわけではない。
バリデーションを何も書かなければ、RailsのバリデーションとしてNULLは最初から許容される。

つまり何もバリデーションを指定せずに allow_nil: true を指定しても意味がない。
(エラーが発生する)

例:

validates :foo_column, allow_nil: true

# raise ArgumentError, "You need to supply at least one validation" if validations.empty?

この指定は属性のバリデーション全体ではなく、バリデーション指定の単位で評価される。
たとえば次のように書いた場合、値がNULLであっても、1行目のバリデーションはスキップされるが、2行目のバリデーションには引っかかる。

validates :foo_column, format: { with: /REG/}, allow_nil: true
validates :foo_column, format: { with: /EXP/ }

allow_blank

allow_nil と同じように動くが、こちらは値がblankの場合にバリデーションをスキップする。

すなわち presence と allow_blank を同時に指定しても意味がない

例:

validates :foo_column, presence: true, allow_blank: true

ガイド

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?