Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用整数列的数值性验证?_Ruby On Rails_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 如何使用整数列的数值性验证?

Ruby on rails 如何使用整数列的数值性验证?,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,给定一个整数列,如何防止字母数字存储为零 我尝试使用数值性验证器,但似乎在类型转换后(使用to_I)检查了该值,因此像'dd1'这样的字符串被类型转换为0,从而通过了验证 validates :portfolio_number, numericality: { only_integer: true, allow_nil: true } 您可以创建自己的验证,用于检查类型转换的值: validate :portfolio_number_is_numeric private def portf

给定一个整数列,如何防止字母数字存储为零

我尝试使用
数值性
验证器,但似乎在类型转换后(使用
to_I
)检查了该值,因此像
'dd1'
这样的字符串被类型转换为
0
,从而通过了验证

validates :portfolio_number, numericality: { only_integer: true, allow_nil: true }

您可以创建自己的验证,用于检查类型转换的值:

validate :portfolio_number_is_numeric

private

def portfolio_number_is_numeric
  return unless value.present?
  errors.add(:portfolio_number, 'must be numeric') unless read_attribute_before_type_cast(:portfolio_number).match?(/\A[0-9]*\z/)
end
这可能会被提取到一个验证器对象中以供重用