如何在Rails中对十进制字段进行验证



我有一个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。

最新更新