MongoIDでMoneyを使用するにはどうすればよいですか? BigDecimal として構成する必要がありますか? そしてレールレベルで?ActiveRecordにはMoneyというものがありますが、知る限りARをサポートしているだけです
4 に答える
私もこれに出くわしました。残念ながら、BigDecimalはMongodbに文字列として格納されるため、floatやintのように合計や並べ替えなどを行うことはできません。
整数は、値をセントで格納する方法のようです。おそらく、Money gemを使用して値を少し抽象化します:https ://github.com/RubyMoney/money
Mongoは、ほとんどの最新のマシンで64ビットを使用してintを格納するため、セント単位でも大量に必要になるリスクはあまりないと思います。-9,223,372,036,854,775,808〜9,223,372,036,854,775,807セントを格納できるようです。したがって、小数点以下2桁を削除して、ドルでの最小/最大値を取得します。
MongoDB は、数値をさまざまなBSONデータ型 (int、long int、double) で格納します。お金をセント (米国通貨の場合) として保存し、long int データ型を使用することをお勧めします。
マネージェムが気に入った場合は、マネータイプとして保管できます。
例: https://gist.github.com/michaelkoper/5007636
お金を配列 [cents, currency] として格納します。
class Product
include Mongoid::Document
field :price, type: Money
end
product = Product.new(:price => Money.new(1000, 'EUR'))
product.price.format
# => "€10.00"
代わりにマネーレールを試すことをお勧めします。https://github.com/RubyMoney/money-railsかなりよく整備されており、mongoid でも動作します!