概要
rails7で1000.to_s(:currency)
の様に、to_s
の引数にシンボルでフォーマットを指定するとDEPRECATION WARNINGが発生するようになりました。
DEPRECATION WARNING: Integer#to_s(:currency) is deprecated. Please use Integer#to_formatted_s(:currency) instead.
この変更はこちらのPRで追加されています。
理由
ruby3.1でsymbol
, true
, false
, nil
, 0-9
へのto_s
メソッド使用時のパフォーマンスチューニングが行われました。
railsではactivesuportで複数クラスのto_s
メソッドをオーバーライドしているためこの恩恵が受けられなくなってしまった様です。
これまでの実装である、引数に:currency
などのシンボルを受け取り、そのシンボルをもとにフォーマットを動的に変更する処理はto_formatted_s
でも実装されたため、そちらを使うようにそのためwarnignのメッセージで促されています。
to_s
はDEPRECATION WARNING
を出力するかruby実装のto_s
を呼び出すかを判断する処理に変更されました。
解決方法
warnignのメッセージで書かれているより呼び出すメソッドが変更するだけです。
- 1000.to_s(:currency)
+ 1000.to_formatted_s(:currency)
to_formatted_s
はto_fs
と言うメソッド名でも呼び出せるようにaliasが指定されています。