我有一个Order
模型,它有一个十进制的:total
。我想验证这个总数是否是小数点后两位,大于0,并且小于一百万。
validates :total, presence: true, format: { with: /Ad+(?:.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_tal"=$1,"total"=$2,"updated_at"=$3 WHERE"orders"。"id"=$4
我还尝试添加此迁移:
def self.up
change_column :orders, :total, :decimal, :precision => 11, :scale =>2
end
在我的模型中,但错误仍然存在。
我想要验证消息在这里。
为了适应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。再加上小数点2,你的精度应该是12而不是11。