【问题标题】:Dealing with precise units in Rails 3在 Rails 3 中处理精确单位
【发布时间】:2011-04-02 12:49:17
【问题描述】:

有没有人有经验/任何人都可以建议存储具有大量变体的数量的最佳实践?

例如,我的一个模型中的一个属性用于存储从几微克到一公斤或更多的重量。我的假设是将所有内容转换为最小单位并将其作为整数存储在数据库中(因为我可能会因浮点数而失去准确性?),但以微克为单位存储千克数量似乎很奇怪..

在更一般的意义上,是否有人能够建议一个可能有助于解决这种行为的 ruby​​/rails 插件?就像将数据库中的“时间”字段转换为 ruby​​ 中的 Time 对象一样,我将如何最好地拦截 database entry -> class attribute 进程,将字段转换为我选择的类?

是否有一种我没有想到的用于存储不同单位大小的设计模式?

【问题讨论】:

  • 可能类似,但不是重复的。当我在发布前第一次搜索答案时,您的链接不匹配;它侧重于时间,而我对一般情况下的模式更感兴趣,我认为 Phrogz 回答得很好。
  • 正如我所回答的,一般情况下的模式是使用 rails 聚合。

标签: ruby ruby-on-rails-3 database-design


【解决方案1】:

如果精度很重要,那么您的建议是个好主意。无论是货币还是重量,存储您可以测量的最小单位的整数数量。

或者,使用BigDecimal,它提供对任意精度的支持(如 you-get-to-choose-the-precision,而不是 Ruby-randomly-chooses-it)。对存储它的良好支持取决于您的数据库——例如,PostgreSQL 正是为此目的提供了NUMERIC data type——并且需要你的 ORM 的支持(大概是 ActiveRecord,它通过:decimal 列类型在迁移中支持这一点)。

尽管金钱的变化通常比微克与千克之间的差异小几个数量级,但如果您 handle this like money 并适当地设置您的精度,您就不会遇到任何问题。

【讨论】:

    【解决方案2】:

    关于时间问题:您不需要 Rails 插件。为此,您有 Rails 聚合:

    Milliseconds with Rails and Mysql(你的问题是故意重复这个问题吗?!)

    至于精度。这只是使用 DBMS 中可用的最佳类型的问题。

    【讨论】:

      猜你喜欢
      • 2019-05-22
      • 1970-01-01
      • 2011-08-24
      • 2011-09-04
      • 2011-09-21
      • 2012-12-16
      • 2015-08-06
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多