Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails mongoid中的货币表示_Ruby On Rails_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails mongoid中的货币表示

Ruby on rails mongoid中的货币表示,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我应该如何使用MongoID?我应该将其配置为BigDecimal吗?在轨道水平上呢?对于ActiveRecord,我们有一种叫做Money的东西,但它只支持ARMongoDB以各种数据类型(int、long int、double)存储数字。我建议您将货币存储为美分(如果是美国货币),并使用long int数据类型。我也遇到了这个问题。不幸的是,BigDecimal在Mongodb中存储为字符串,因此它不允许像浮点或整数一样对其进行求和、排序等操作 整数似乎是以美分为单位存储价值的方法,可能使用

我应该如何使用MongoID?我应该将其配置为BigDecimal吗?在轨道水平上呢?对于ActiveRecord,我们有一种叫做Money的东西,但它只支持AR

MongoDB以各种数据类型(int、long int、double)存储数字。我建议您将货币存储为美分(如果是美国货币),并使用long int数据类型。

我也遇到了这个问题。不幸的是,BigDecimal在Mongodb中存储为字符串,因此它不允许像浮点或整数一样对其进行求和、排序等操作

整数似乎是以美分为单位存储价值的方法,可能使用Money gem对其进行一些抽象:

Mongo在大多数现代机器上使用64位存储int,我认为这样即使以美分表示,也不会有太大的风险。看起来你可以在−9223372036854775808和9223372036854775807美分,因此去掉两个小数位以获得美元的最小/最大值


我建议您尝试使用money rails作为替代方案。它维护得很好,也可以与mongoid一起使用

如果你喜欢货币宝石,你可以将其作为货币类型存储

例如:

它将钱存储为数组[美分,货币]

class Product
   include Mongoid::Document

  field :price,    type: Money
end

product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"

像十进制,int,floats…dm是正确的。永远不要使用浮点数来表示货币(如浮点数、双精度浮点数)。这会造成很多麻烦。在代理过程中,您将损失美分。例如,10.2可以表示为10.19999(9)。在舍入和不同的算术运算过程中,误差会越来越大。我对此有意见。我目前使用的是:money rails v1.12 rails v6 mongoid v7我想设置每个模型实例使用的默认货币。我在我的模型中设置了如下字段
field:price,type:Money,使用\u model\u currency::currency
但是当我尝试创建或获取记录时,我得到了以下错误
Mongoid::Errors::invalidFieldDoption
消息:无效选项:为字段:price提供了\u model\u currency。如何在rails Mongoid应用程序中使用
使用\u model\u currency
选项?在rails mongoid应用程序中,我还可以如何处理资金?