8
5

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.

allow_nil: trueとは

Posted at

はじめに

Ruby on Railsでは、データモデルのバリデーションを設定することが一般的です。その一部として、allow_nil: trueというオプションが存在します。この記事では、allow_nil: trueがどのように動作し、それがどのような状況で役立つのかを詳しく解説します。

allow_nil: trueの基本的な動作

allow_nil: trueオプションは、指定した属性のバリデーションを行う際に使用されます。このオプションが設定されていると、属性の値がnilの場合にはバリデーションがスキップされます。つまり、その属性がnilでもバリデーションエラーにはならないのです。

例えば

Userモデルにreset_password_token属性属性が存在し、以下のようなバリデーションが設定されているとします。

user.rb
validates :reset_password_token, uniqueness: true, allow_nil: true

いくつかのシナリオを見てみます。
reset_password_tokenがnilの場合: allow_nil: trueが適用され、  reset_password_tokenのnil値は許容されます。バリデーションエラーは発生しません。

reset_password_tokenが空文字("")の場合:allow_nil: trueは適用されず、presence: trueによりバリデーションエラーが発生します。(空文字は String クラスのインスタンスで、 nil は NilClass のインスタンスだから)

reset_password_tokenが実際の値を持つ場合:通常のpresence: trueバリデーションが適用され、バリデーションエラーは発生しません。

allow_nil: trueとallow_blank: trueの違い

allow_blank: trueallow_nil: trueと似ていますが、微妙に違います。allow_blank: trueは、属性の値がnilまたは空白(""や" "など)の場合にバリデーションをスキップします。

まとめ

allow_nil: trueは、バリデーションにおいて属性のnil値を許容するための有用なオプションです。しかし、使用する際はallow_blank: trueとの違いを理解し、それぞれのバリデーションがどのように動作するのかを正しく理解することが重要です。

参考文献

Rails APIドキュメンテーション: Active Record Validations

8
5
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
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?