给出整数列如何防止字母数字存储为零?
[我尝试使用numericality
验证程序,但似乎在类型转换后(使用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
为了潜在的可重用性,可能会将其提取到验证器对象中。