通常、フィールド「種類」は空白のままにしてください。ただし、空白でない場合は、値を['a'、 'b']に含める必要があります
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
コードが機能しませんか?
この構文は、nilsを許可しながら包含検証を実行します。
validates :kind, :inclusion => { :in => ['a', 'b'] }, :allow_nil => true
Rails 5では、包含ブロックの外側または内側で_allow_blank: true
_を使用できます。
_validates :kind, inclusion: { in: ['a', 'b'], allow_blank: true }
_
または
_validates :kind, inclusion: { in: ['a', 'b'] }, allow_blank: true
_
ヒント:テキスト値にはin: %w(a b)
を使用できます
次も確認してください:allow_blank => true
belongs_to
アソシエーションのRails 5でこれを達成しようとしている場合、デフォルトの動作では値が存在する必要があると考えてください。
この動作をオプトアウトするには、optional
フラグを指定する必要があります。
belongs_to :foo, optional: true
validates :foo, inclusion: { in: ['foo', 'bar'], allow_blank: true }
Rails 5.xでは、次の行に加えて、before_validation
方法:
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
before_validation
は、送信された空白値をnil
に変換するために必要です。それ以外の場合は''
は、次のようにnil
とは見なされません。
before_validation(on: [:create, :update]) do
self.kind = nil if self.kind == ''
end
データベースのディスク容量を使用する場合、空の値を空の文字列として保存するよりも、nil
を保存する方が良いことは言うまでもありません。