Ruby on Rails 映射现有表的 BigDecimal 字段



我为现有表创建了一个rails模型类。某些表字段是在 Postgres DB 中定义为 numeric(19,2) 的十进制字段。当我打开 rails 控制台并像这样获取其中一个对象时:

 ExistingTableModel.first.total
 #<BigDecimal:4bfd250,'0.692E3',9(18)>

所以,我得到了一个大十进制 9(18) .这是一个问题,因为当我做总和之类的东西时,由于四舍五入,结果并不好。

如何强制轨道将这些字段映射到具有 2 位小数的 BigDecimal ?

谢谢!

您可以覆盖属性访问器。 假设您有一个带有属性 foo numeric(19,2) 的旧版 Postgres 表

model ExistingTableModel < ActiveRecord::Base
  def foo
    read_attribute(:foo).round(2)
  end
end

这将使 foo 属性的每次访问都四舍五入到小数点后 2 位的精度。

使用模型相关表列中的精度和小数位数选项。

从文档中:

精度是有效位数,而小数位数是 小数点后可以存储的位数。 例如,数字 123.45 的精度为 5,小数位数为 2。 精度为 5、小数位数为 2 的小数点的范围可以从 -999.99 到 999.99。

PostgreSQL: :p recision [1..infinity], :scale [0..infinity]。无默认值。

完整的接口参考

最新更新