我有Order
模型,该模型有一个十进制:total
。我想验证该总数是否为小数点后两位,大于0,小于一百万。
validates :total, presence: true, format: { with: /\A\d+(?:\.\d{0,2})?\z/ }, numericality: { greater_than: 0, less_than: 100_000_000 }
当我的总数变成1234567890.00
时,会引发错误:
PG :: NumericValueOutOfRange:错误:数字字段溢出详细信息:精度为11的字段,小数位2必须四舍五入为小于10 ^ 9的绝对值。 :UPDATE“ orders” SET“ tax_total” = $ 1,“ total” = $ 2,“ updated_at” = $ 3 WHERE“ orders。”“ id” = $ 4
我还尝试添加此迁移:
def self.up
change_column :orders, :total, :decimal, :precision => 11, :scale =>2
end
在我的模型中,但错误仍然存在。
我想要验证消息here。
答案 0 :(得分:1)
要适合1234567890.00,您的迁移应为
def self.up
change_column :orders, :total, :decimal, :precision => 12, :scale =>2
end
要验证数字的数值,请在滑轨级别使用以下内容:
validates_numericality_of :decimal, less_than_or_equal_to: BigDecimal(10**8)
请记住,精度是总数-(尾数+特征) 对于您的情况1234567890总计为10。为此加上10的2,这就是您的精度应为12而不是11的方式。