https://github.com/rails/rails
Railsのマイグレーションで `change_table bulk: true` をロールバックする際、テーブル名のプレフィックス/サフィックスが正しく適用されない問題を修正。`bulk_change_table` 呼び出し時に、元の引数ではなくテーブル定義オブジェクトの `name` プロパティを参照するように変更。
Ruby 3.3以降でRake 13.1.0が標準バンドルされるようになったため、RailsのGemfileから明示的なRakeバージョン制約(>= 13)を削除。依存関係の管理がシンプルになり、Ruby本体の進化に合わせた自然な整理が行われました。
ActiveModel::Errors#added? メソッドで、コールバックオプション(allow_nil、if、unlessなど)を指定したエラーチェックが常にfalseを返す不具合を修正。strict_match?メソッドで、クエリ側のオプションからもコールバックオプションをフィルタリングすることで、対称的な比較を実現。
Rails 8.2で、すべての主要ブラウザがサポートを終了した`X-XSS-Protection`ヘッダーがデフォルト設定から削除されます。このヘッダーは Rails 7.0で無効化(`0`)されていましたが、今回のアップデートで完全に削除され、セキュリティヘッダーの構成がよりシンプルになります。
ActionViewのバグレポートテンプレートに、テンポラリディレクトリを使用した実際のテンプレートファイルレンダリングのテスト例を追加。パーシャルレンダリングを含む実践的なケースを示すことで、より再現可能で明確なバグレポートの作成を促進する。
Rails 8.2で`protect_from_forgery`を戦略指定なしで呼び出すことが非推奨に。新設定`config.action_controller.default_protect_from_forgery_with`により、デフォルトストラテジーが`:null_session`から`:exception`に変更されます。既存コードは`:with`オプションを明示することで移行可能です。
Rails認証ジェネレータのテストテンプレートを改善。不要な`User.take`呼び出しを`@user`に置き換え、データベースクエリを削減してテストの効率性と一貫性を向上させました。
Arel::TreeManagerが初期化時に渡されたテーブルのengineを自動的に使用するように改善。これにより、マルチデータベース環境で`to_sql`にengineを明示的に渡す必要がなくなり、コードがより簡潔になりました。
PostgreSQLスキーマダンパーで、異なるスキーマ間の外部キー参照を正しくダンプできるよう修正。既にスキーマ修飾されたテーブル名に対して、誤って別のスキーマ名を重複して付与していた問題が解決されました。
RailsのUniqueness Validationで、クエリAST構築時にデータベースコネクションを取得していた問題を解決。新たに `CaseSensitiveEquality` と `CaseInsensitiveEquality` のArelノードと対応する述語メソッドを追加し、データベース固有のロジックをSQL生成時まで遅延させることで、パフォーマンスとスレッドセーフティを向上させました。
Active Recordのテストスイートにおいて、`helper.rb`に散在していた設定を機能別の4つのサポートモジュールに分離し、`QUOTED_TYPE`定数を`ARTest`名前空間に移動するリファクタリングを実施。これにより、テストコードの保守性と可読性が向上しました。
PostgreSQLアダプタの型マッピングコールバック用クラス変数の初期化方法を、`||=` から `defined?` を使用した明示的なチェックに変更。テスト分離実行時の安定性が向上し、未定義状態と `nil` の区別が適切に行われるようになった。
PostgreSQLアダプタにカスタム型を登録するための公式API `register_type_mapping` が追加されました。これまでmonkey patchが必要だったPostGIS等の拡張型登録が、安全で保守性の高い方法で実現できるようになります。
GCS Active StorageでIAMクライアントをメモ化し、ADC認証を復元。以前のPRで削除されていたADC認証を再導入しつつ、クライアントをインスタンス変数でメモ化することで過度なメタデータサーバー呼び出しを抑制。カスタム認証方法の設定も可能になりました。
SQLite3で非AUTOINCREMENT整数主キーを持つテーブルのスキーマダンプが `default: nil` を無視し、復元時にAUTOINCREMENTが誤って追加される問題を修正。`sqlite_master` テーブルを直接クエリしてAUTOINCREMENTの有無を判定することで、スキーマの忠実な復元を実現。
Rails 8.1のPostgreSQLアダプターにおいて、`schema_search_path`が`reset!`または`reconnect!`実行後にPostgreSQLのデフォルト値に戻ってしまう問題を修正。`clear_cache!`メソッドのオーバーライドと接続時のキャッシュ初期化により、再接続後も設定したスキーマ検索パスが正しく維持されるようになりました。
RailsのYJIT有効化処理で、`RubyVM::YJIT.enable`の`defined?`チェックが再追加されました。Ruby 3.3未満との互換性を保つための防御的な変更です。
Rails mainブランチがRuby 3.3以上を必須としたことに伴い、古いバージョンとの互換性コードを削除。SecureRandomのパラメータチェック、Range#overlap?の独自実装、Fiber#killのモックメソッドなどが対象。コードベースがよりシンプルで保守しやすくなった。
Rails.app.revisionがカレントディレクトリではなくアプリケーションルートのGitリポジトリを参照するように修正。git -Cオプションの使用、systemメソッドへの移行、IO.pipeを使った安全な出力キャプチャにより、異なるディレクトリからアプリケーションを起動した場合でも正しいリビジョン情報を取得できるようになりました。
Railsジェネレータの`.ruby-version`ファイル生成に関するテストが、rbenv/rvm環境で失敗する問題を修正。テストケース内で`RBENV_VERSION`と`rvm_ruby_string`環境変数を明示的に`nil`に設定することで、バージョン管理ツールの影響を排除し、環境依存しない信頼性の高いテストを実現しました。