🦔

Rails で数値を3桁区切りの文字列に変換する場合は #to_fs メソッドを使う

2024/01/23に公開

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 メソッドを利用するようにしましょう。

参照

GitHubで編集を提案

Discussion