🦔
Rails で数値を3桁区切りの文字列に変換する場合は #to_fs メソッドを使う
Rails(正確にいえば ActiveSupport)で数値を3桁区切りの文字列に変換する場合は Integer#to_formatted_s, #to_fs
が利用できます。
require "active_support/all"
pp ActiveSupport::VERSION::STRING
# => "7.1.3"
# #to_fs メソッドでフォーマットを指定して変換できる
# #to_fs は #to_formatted_s のエイリアス
p 12345.to_fs(:delimited)
# => "12,345"
# delimiter で区切り文字を指定も可能
p 12345.to_fs(:delimited, delimiter: "_")
# => "12,345"
余談
#to_formatted_s, #to_fs
メソッドは Rails 7.0 から追加されたメソッドでそれ以前は #to_s
で利用する事ができました。
require "active_support/all"
pp ActiveSupport::VERSION::STRING
# => "6.1.7.6"
# 以前は #to_s メソッドで利用できていた
p 12345.to_fs(:delimited)
# => "12,345"
逆にいうと #to_s
メソッドを用いたフォーマット指定は Rails 7.0 以降では警告が出るようになっています
require "active_support/all"
pp ActiveSupport::VERSION::STRING
# => "7.0.8"
# DEPRECATION WARNING: Integer#to_s(:delimited) is deprecated. Please use Integer#to_fs(:delimited) instead. (called from <test> at /path/to/test.rb:93)
p 12345.to_fs(:delimited)
# => "12,345"
これは Ruby 3.1 で #to_s
メソッドのパフォーマンス改善を行ったので『Rails 側で #to_s
メソッドを書き換えるのはよくない』という背景があります。
Rails 7.0 以降は #to_formatted_s, #to_fs
メソッドを利用するようにしましょう。
Discussion