通貨・お金の取り扱い方法としては、どのようなものがありますか?
非常に基本的なショッピングカートのシステムを作っています。
テーブルitems
には、integer
型のprice
列があります。
ユーロとセントの両方を含む価格の場合、ビューに価格の値を表示するのに苦労しています。Rails フレームワークでの通貨の扱いについて、何か明らかなことを見逃しているのでしょうか。
315
3
非常に基本的なショッピングカートのシステムを作っています。
テーブルitems
には、integer
型のprice
列があります。
ユーロとセントの両方を含む価格の場合、ビューに価格の値を表示するのに苦労しています。Rails フレームワークでの通貨の扱いについて、何か明らかなことを見逃しているのでしょうか。
データベースでは、おそらく
DECIMAL
型を使いたいと思うでしょう。マイグレーションでは、以下のようにします。Railsでは、
:decimal
型はBigDecimal
として返され、価格計算にはもってこいです。整数を使うことにこだわると、
BigDecimal
との間でいたるところで手動で変換しなければならず、おそらく面倒なことになるでしょう。mclさんが指摘されているように、価格を表示するには
ここでは、
composed_of
(ActiveRecordの一部で、ValueObjectパターンを使用)とMoney gemを活用した、素晴らしくシンプルなアプローチを紹介します。次のものが必要です。
Product
)。integer
列、例えば:price
などこれを
product.rb
ファイルに記述します。あなたが得られるもの
product.price.to_s
は、10進数で表示します ("1234.00")product.price.format
は、通貨に応じて適切にフォーマットされた文字列を表示します。product.price.cents.to_s
とします。通貨を扱う場合、一般的には10進数型を使用します。 以下は、"Agile Web Development with Rails"からの簡単な例です。
これにより、-999,999.99から999,999.99までの価格を扱うことができます。 また、以下のようにアイテムにバリデーションを入れることもできます。
のようにアイテムにバリデーションを入れて、値の健全性をチェックすることもできます。