2011-04-02 101 views
2

有没有人有任何经验/谁能提出最佳实践来存储大量变量的数量?处理Rails中的精确单元3

例如,我的一个模型中的某个属性用于存储一个重量,该重量可以是从几微克到一公斤或更多的任何物体。我的假设是将所有东西都转换成最小单位,并将其作为一个整数存储在数据库中(因为我可能会因为浮点数而失去准确性?),但以微克为单位存储千克数似乎很奇怪。能够建议一个ruby/rails插件,可能有助于这种行为,在更一般的意义上?就像数据库中的“时间”字段被转换为红宝石中的Time对象一样,我将如何去最好地拦截database entry -> class attribute进程,将字段转换为我选择的类?

是否有一种设计模式可以存储我不知道的单位量级?

+0

这是一个重复http://stackoverflow.com/questions/5498394/milliseconds-with-rails-and-mysql – 2011-04-03 13:57:32

+0

类似的,也许,但不是重复。当我在发布之前首先搜索答案时,您的链接不匹配;它关注时间,而我更关心一般情况下的模式,我认为Phrogz已经很好地回答了。 – Jeriko 2011-04-04 08:51:40

+0

正如我所回答的,一般情况下的模式是使用rails聚合。 – 2011-04-04 09:30:31

回答

3

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

或者,使用BigDecimal,它提供对任意精度的支持(如在你选择精度时,而不是在Ruby中随机选择它)。良好的存储支持取决于你的数据库 - 例如,PostgreSQL恰恰为此提供了NUMERIC data type,并且需要来自ORM的支持(大概ActiveRecord支持通过:decimal列类型进行迁移)。

即使钱通常变化的数量级小于微克到千克之间的差异,如果你的handle this like money适当地设置你的精度,你将不会遇到任何问题。

0

关于时间问题:你不需要这个插件。你有Rails的聚合用于此目的:

Milliseconds with Rails and Mysql(是你的问题这一个?的有意式两份)

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