LoginSignup
0
0

More than 1 year has passed since last update.

#Rails deny nill value but allow blank value validation / exclusion: { in: [nil] }

Last updated at Posted at 2020-02-20

Model

class User < ApplicationRecord
  validates :name, exclusion: { in: [nil] }
end

動作イメージ

User.create!(name: nil)

ActiveRecord::RecordInvalid: 名前 は予約されています

User.create!(name: "")
# 成功

ガイド

image

presence は?

空文字を禁止してしまう

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

class Person < ApplicationRecord
  validates :name, :login, :email, presence: true
end

allow_blank は?

値が未入力、空文字の時にバリデーションをスキップするためオプション指定であり、空文字を許容するわけではない

3.2 :allow_blank
:allow_blankオプションは:allow_nilオプションと似ています。このオプションを指定すると、属性の値がblank?に該当する場合(nilや空文字など)にバリデーションがパスします。

class Topic < ApplicationRecord
  validates :title, length: { is: 5 }, allow_blank: true
end
 
Topic.create(title: "").valid?  # => true
Topic.create(title: nil).valid? # => true

Original by Github issue

チャットメンバー募集

何か質問、悩み事、相談などあれば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