我有一个名为cost的数据库表,其中包含amount和currency列。我正在寻找一种解决方案来将货币保存到此列中。
您建议使用哪种数据类型来存储货币,并且应该在其中保存什么值(ISO代码、货币符号等)?或者像Java中那样,Ruby中已经有了Currency数据类型吗?
我有一个名为cost的数据库表,其中包含amount和currency列。我正在寻找一种解决方案来将货币保存到此列中。
您建议使用哪种数据类型来存储货币,并且应该在其中保存什么值(ISO代码、货币符号等)?或者像Java中那样,Ruby中已经有了Currency数据类型吗?
enum currency: [:dollar]
这将创建一个与枚举相同名称的方法,因此假设您有一个成本变量:
cost.dollar?
这将根据值返回true或false。
此外,您可以轻松创建一些情况,以使您喜欢的所有货币更改:
case cost.currency
when Cost.currencies[:dollar]
# Do something
end
始终将此列与Cost.currencies[:symbol_of_currency]进行比较,而不是数字(枚举类似于C,0将是第一个元素),这样可以更改枚举内元素的顺序或添加新元素,而不会更改应用程序的功能。
此外,这使您可以像这样在数据库中创建行:
Cost.create(currency: :dollar, amount: 30.0, ...)
/100
以获得以美元为单位的值。money
库。实际上,该库使用了我刚才描述的完全相同的方法。事实上,该库曾经被移植到使用 BigDecimal,它是一个专门用于处理任意精度整数算术的 Ruby 库。money-rails
库是一个快速的解决方案。但是,您并不需要使用这个库,也不需要使用money
库,特别是如果您的需求仅限于特定模型和基本操作。