LoginSignup
0
0

More than 1 year has passed since last update.

数値がどうかを検証する

Last updated at Posted at 2023-01-30

2.9 numericality

このヘルパーは、属性に数値のみが使われていることを検証します。デフォルトでは、整数値または浮動小数点数値にマッチします。これらの冒頭に符号がある場合もマッチします。
:only_integerをtrueに設定すると、属性の値に対するバリデーションで以下の正規表現が使われます。

/\A[+-]?\d+\z/

それ以外の場合は、Floatを用いる数値の変換を試みます。Floatは、カラムの精度または15を用いてBigDecimalにキャストされます。

class Player < ApplicationRecord
  validates :points, numericality: true
  validates :games_played, numericality: { only_integer: true }
end

:only_integerのデフォルトのエラーメッセージは「must be an integer」です。

このヘルパーでは、:only_integer以外にも以下のオプションで値の制約を指定できます。

:greater_than: 指定の値よりも大きくなければならないことを指定します。デフォルトのエラーメッセージは「must be greater than %{count}」です。
:greater_than_or_equal_to: 指定の値と等しいか、それよりも大きくなければならないことを指定します。デフォルトのエラーメッセージは「must be greater than or equal to %{count}」です。
:equal_to: 指定の値と等しくなければならないことを示します。デフォルトのエラーメッセージは「must be equal to %{count}」です。
:less_than: 指定の値よりも小さくなければならないことを指定します。デフォルトのエラーメッセージは「must be less than %{count}」です。
:less_than_or_equal_to: 指定の値と等しいか、それよりも小さくなければならないことを指定します。デフォルトのエラーメッセージは「must be less than or equal to %{count}」です。
:other_than: 指定の値以外の値でなければならないことを指定します。デフォルトのエラーメッセージは「must be other than %{count}」です。
:in:渡された範囲に値が含まれていなければならないことを指定します。デフォルトのエラーメッセージは「must be in %{count}」です。
:odd: trueの場合は奇数でなければなりません。デフォルトのエラーメッセージは「must be odd」です。
:even: trueの場合は偶数でなければなりません。デフォルトのエラーメッセージは「must be even」です。
デフォルトでは、numericalityのnil値は許容されません。
allow_nil: trueオプションでnil値を許可できます。

デフォルトのエラーメッセージは「is not a number」です。

出典

感想

数字だけのバリデーションがあるのか。
他にも色々なヘルパーが使えるらしい。
これらの存在があることだけでも覚えておこう。
先で使えるかも知れない。

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