如何对整数列使用数字验证?

问题描述 投票:0回答:1

给出整数列如何防止字母数字存储为零?

[我尝试使用numericality验证程序,但似乎在类型转换后(使用to_i)检查了该值,因此将'dd1'之类的字符串类型转换为0,从而通过了验证。

validates :portfolio_number, numericality: { only_integer: true, allow_nil: true }
ruby-on-rails ruby-on-rails-5
1个回答
0
投票

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

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

为了潜在的可重用性,可能会将其提取到验证器对象中。

© www.soinside.com 2019 - 2024. All rights reserved.