商品詳細表示機能② 販売価格表示も3桁区切りにしてみよう

商品出品機能実装過程で、販売手数料と販売利益はカンマ区切り表示になるようにしました。

ただ、販売価格についてはJavaScriptの絡みがあってうまく実装できずにいました。

商品詳細表示機能を実装していく中で、詳細画面に遷移した際に表示される情報としては、

  • 商品名
  • 商品画像
  • 販売価格
  • 出品者
  • カテゴリー
  • 商品の状態
  • 配送料の負担
  • 発送元の地域
  • 発送日の目安

上記の項目を表示させるようにします。

インスタンス変数.カラム名 でデータの取得が可能です。 販売価格を表示させようと思ったら、 @item.price で可能ではあるのですが、ここもどうにかしたらカンマ区切り表示させられるんじゃね? と思い立ち、調べてみることにしました。

すると、やっぱりあったー。

number_to_currency 通貨表示

number_to_currency は Rails フレームワークに組み込まれているヘルパーメソッドで、通貨をフォーマットするための便利なメソッドです。 これは RailsActionView ヘルパーの一部であり、HTML テンプレート内でよく使われます。

もうひとつ、数値を3桁区切り表示にさせる技があります。

to_sメソッド 数値を文字列オブジェクトに変換

to_s メソッドは基本的な Ruby メソッドで、オブジェクトを文字列に変換するためのものです。 例えば、数値を文字列に変換したい場合は、

12345678.to_s
 # => 12345678

このように記述します。 ここに引数で :delimited を渡すことによってカンマ区切り表示されます。

12345678.to_s(:delimited)
 # => 12,345,678

to_s メソッドを使って数値を文字列に変換することはできますが、あくまでも文字列。 さくっとカンマ表示できたらいいや、ってときはいいかもです。 ただ、通貨のフォーマットなどは手動で行う必要があります。

number_to_currency を使用すると、通貨のフォーマットや桁区切りなどが自動的に適用され、より便利になります。

わたしが採用した記述はこちら。

<%= number_to_currency(@item.price, unit: "¥", precision: 0, format: "%u %n" ) %>

このように記述すると、

こんな感じで表示されます。

オプション 説明
unit: "¥" 通貨マーク
precision: 0 小数点以下非表示(整数)
format: "%u %n" 円マークと数値の間に空白

precisionオプション を使わないと小数点以下が表示されてしまいます。 precision: 0 とすることで整数表示になります。

number_to_currency は通貨なので数値ですね。currendy ですからね。

もうこれは好みですね。お好きな方でどうぞって感じ。

ChatGPT先生によると、

# format: "%u %n" は、通貨の表示形式を指定するためのオプションです。具体的には、%u は通貨単位を表し、%n は数値部分を表します。 例えば、unit: "¥" を指定している場合、%u は "¥" を表示し、%n は数値を表示します。 このようなフォーマット指定を使うことで、通貨の単位と数値部分をカスタマイズすることができます。

とのこと。

◆例

number_to_currency(1234.56, unit: "¥", format: "%u %n") # 結果: "¥ 1,234.56"

この場合、"%u %n" により "¥" と数値がスペースで区切られて表示されます。 この部分を変更することで、通貨の表示形式をカスタマイズできます。

いろいろなアプローチができますね。