🖥

#Rails で nil は禁止するが blank ( 未入力/から文字の入力 ) は許容するバリデーション / exclusion: {

に公開

Model

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

動作イメージ

User.create!(name: nil)

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

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

ガイド

image

https://railsguides.jp/active_record_validations.html

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

https://github.com/YumaInaura/YumaInaura/issues/2993

チャットメンバー募集

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

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2020-02-20

Discussion