我为现有表格创建了一个 Rails 模型类。一些表字段是在 Postgres 数据库中定义为 numeric(19,2) 的十进制字段。当我打开 Rails 控制台并像这样获取其中一个对象时:
ExistingTableModel.first.total
#<BigDecimal:4bfd250,'0.692E3',9(18)>
所以,我得到一个 BigDecimal 9(18) 。这是一个问题,因为当我进行求和之类的操作时,由于四舍五入,结果并不理想。
我如何强制 Rails 将这些字段映射到带 2 位小数的 BigDecimal?
谢谢!
最佳答案
您可以覆盖属性访问器。假设您有一个带有属性 foo numeric(19,2) 的遗留 Postgres 表
model ExistingTableModel < ActiveRecord::Base
def foo
read_attribute(:foo).round(2)
end
end
这将使每次访问 foo 属性时四舍五入到小数点后两位的精度。
关于Ruby on Rails 映射现有表的 BigDecimal 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12467842/