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

时间:2018-11-02 10:26:35

标签: ruby-on-rails

我有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

1 个答案:

答案 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的方式。