概要
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が指定されています。