`raise_on_missing_required_finder_order_columns` のデフォルト値を修正
コピー&ペーストによる記述ミスで、ActiveRecord.raise_on_missing_required_finder_order_columns の初期値が false ではなく nil になっていた不具合を修正します。動作への影響はないものの、ドキュメントとの乖離を解消する正確性の修正です。
背景
#54608 で raise_on_missing_required_finder_order_columns 設定が導入された際、コピー&ペーストによる修正漏れが発生していました。load_defaults のバージョンが 8.1 未満の場合にこの設定のデフォルト値が適用されるコードで、別の設定 run_after_transaction_callbacks_in_order_defined の初期化行がそのまま重複して残されていました。
結果として、Railsガイドでは false と明記されているにもかかわらず、実際のデフォルト値は nil となっていました。nil と false はどちらもfalsy値であるため実行時の挙動に変化はありませんが、コードベースとドキュメントの不一致として残っていた問題です。
技術的な変更
activerecord/lib/active_record.rb の1行を修正することで、重複代入を正しい代入に置き換えます。
変更前:
singleton_class.attr_accessor :raise_on_missing_required_finder_order_columns
self.run_after_transaction_callbacks_in_order_defined = false
変更後:
singleton_class.attr_accessor :raise_on_missing_required_finder_order_columns
self.raise_on_missing_required_finder_order_columns = false
変更前のコードでは、raise_on_missing_required_finder_order_columns の attr_accessor が宣言されているにもかかわらず、続く代入は run_after_transaction_callbacks_in_order_defined に対して行われていました。これにより raise_on_missing_required_finder_order_columns は未代入のまま nil となり、コンソールで ActiveRecord.raise_on_missing_required_finder_order_columns を参照すると nil が返される状態でした。
設計判断
PR作者が明示しているとおり、nil と false は同じfalsy値であるため、この修正は実行時の振る舞いを変更しません。修正の目的は、Railsガイドに記載された公式のデフォルト値 false と、実際のコードが返す値を一致させることにあります。
この種の1行バグは、設定追加時のコピー&ペーストで起きやすく、テストで検出しにくい類の不整合です。PR本文で「コピー&ペーストして修正を忘れたPR」と明確に指摘されており、元凶となった #54608 のマージ後も長期間見過ごされていたことが分かります。
まとめ
1行の代入先を修正するだけの変更ですが、コードとドキュメントの乖離を解消することで、設定値を参照したデバッグやイントロスペクションの正確性が担保されます。挙動に影響がないとはいえ、公式ドキュメントに記載されたデフォルト値が実際のコードと一致していることは、信頼性の高いAPIを維持するうえで重要な基盤です。