はじめに
Rails8.1で、ActiveRecordの関連付けに対して非推奨フラグを付与できる新機能が実装された
この機能は以下PRで実装された
これにより、今後は廃止予定だから使って欲しくない関連付けの使用箇所を検出しやすくなる
deprecatedについて
Rails8.1では、以下のようにdeprecatedとしてマークできる
class Author < ApplicationRecord
has_many :books, deprecated: true
end
このように設定すると、以下のようにbooksへアクセスしたときに警告が表示される

また、直接的な参照でなくても、preloadなどの間接的な参照をしている部分で警告が表示される

モード
非推奨化には、以下の3種類のモードがサポートされている
| モード | 動作 |
|---|---|
:warn |
警告としてログに出力(デフォルト) |
:raise |
利用した時点で例外発生 |
:notify |
Active Support notificationsとして発行 |
また、スタックトレースの可否も設定できる
このモードは、以下のようにconfigで変更することができる
application.rb
config.active_record.deprecated_associations_options = { mode: :notify, backtrace: true }
参考