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

标签 ruby ruby-on-rails-3

我为现有表格创建了一个 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/

相关文章:

ruby - 是否有用于 Ruby(如 JAXB)的 XML 绑定(bind)库?

html - RoR3/HTML : Many check boxes, 对那些检查项目的不同操作,如何?

ruby - 创建/构建 Hook 后 DRY FactoryGirl

ruby-on-rails - 用于 postgresql 的 Ruby on Rails : How can I edit database. yml?

ruby - 如何使用 Ruby 一步初始化一个数组?

ruby-on-rails - 事务中的 HTTP 请求?

ruby-on-rails - Elasticsearch 和 Tire Gem : "IndexMissingException[[products] missing]"?

ruby-on-rails-3 - Rails 在迁移中预填充表

Ruby:用 block 初始化对象实例

ruby-on-rails - 私有(private)方法 `test' 调用 #<ActiveRecord::ConnectionAdapters::TableDefinition:0x7f2a8fb07c30>