2017-09-18 6 views
2

ActiveRecordは、整数や小数などの数値フィールドに非数値入力が指定されているかどうかを認識します。このような場合、値は0(小数点の場合は0.0)に変換されます。これは検証の前に発生するので、以下に示すような非数値文字を検出するための正規表現検証は機能しません。Rails validation:数値フィールドで無効な数値以外の入力を正しく検証するにはどうすればよいですか?

validates :fee, presence: true, format: { with: /\A\d{0,11}(\.?\d{0,2})?\z/ }

場合は、値「」与えられ、それは0としてデータベースに保存され、検証エラーが返されないであろう。これは多くの場合許容されるかもしれませんが、無効な入力を検出し、検証エラーをユーザーに返すことが理想的です。

どうすればいいですか?

私はこの上の任意のドキュメントを見ていない

答えて

1

ので、ここで私が見つけた答えだ:

使用numericality: true

これは数値フィールドに非数値入力の検証エラーが返されます。

validates :fee, presence: true, format: { with: /\A\d{0,11}(\.?\d{0,2})?\z/ }, numericality: true

正規表現バリデータはまだ適切に任意の数値の入力を検証します。

関連する問題