https://github.com/rails/rails
`bigdecimal` 4.x へのアップグレードで `BigDecimal#to_s` の出力形式が変わり、Arel のテストが失敗するようになりました。テストの期待値を固定文字列 `"2.14"` から `BigDecimal("2.14").to_s` の動的な出力へ変更することで、`bigdecimal` のバージョン間の差異を吸収しています。
PostgreSQL アダプターの `ACCEPTABLE_UUID` 正規表現を修正し、末尾にダッシュを持つ不正なUUID文字列を正しく拒否するようになりました。PR #49934 で導入されたUUID柔軟受け入れ処理が末尾ダッシュを見逃す原因となっており、正規表現の繰り返し構造を「ダッシュ前置」方式に変更することで修正されています。
`ActionController::Parameters#merge` および `#merge!` が複数のハッシュを同時に受け取れるようになり、Ruby の `Hash#merge` との引数互換性が完全に一致しました。引数シグネチャを `*other_hashes` に変更し、`map!(&:to_h)` でスプラット展開する最小限の実装で、既存コードへの影響なく機能を拡張しています。
APIオンリーのRailsアプリでActive Storageのダイレクトアップロードを使用する際に発生していたCSRFエラーとOriginヘッダー不一致の問題を解消するため、`ActiveStorage::BaseController`の親クラスを設定できるようになりました。`config.api_only = true`の場合は自動で`ActionController::API`が選択され、`config.active_storage.base_controller_parent`で任意の親クラスを明示指定することも可能です。既存のアプリケーションへの影響はありません。
`connected_to`などのロール切り替えメソッドで、`reading`ロール使用時に`prevent_writes`を`true`へ強制する処理をメソッド本体からパラメータのデフォルト値(`role == ActiveRecord.reading_role`)へ移動しました。あわせて、`reading`ロールで`prevent_writes: false`を明示した場合は黙って上書きする代わりに`ArgumentError`を送出するよう変更され、メソッドシグネチャがそのままドキュメントとして機能するようになっています。
Railsの開発用エラーページの「Copy as text」ボタンで、スタックトレースにHTMLエスケープ文字(`'` など)が混入するバグが修正されました。テキストの格納要素を `<script type="text/plain">` から `<textarea hidden>` に変更し、JavaScriptの取得プロパティを `.textContent` から `.value` に切り替えることで、ブラウザの自動エスケープを回避しています。
Active Recordのテストスイートで、無限ポーリングループによりCIジョブがハングする問題を修正。タイムアウト付き汎用ヘルパー `wait_for` を導入し、既存の `WaitForAsyncTestHelper` を `WaitForTestHelper` に統合することで、テストが必ずタイムアウトエラーとして失敗するようになった。
`ActiveSupport::Notifications.subscribe` と `asserted` フラグを使った手動購読パターンを `assert_notification` ヘルパーで置き換え、`trilogy_adapter_test.rb`・`instrumentation_test.rb`・`query_cache_test.rb` のテストを簡素化しました。通知の取得と検証ロジックが分離され、`ensure` による手動 `unsubscribe` も不要になります。[#56989](https://github.com/rails/rails/pull/56989) に続く ActiveRecord テストの `NotificationAssertions` 対応完了です。
`config.active_record.run_after_transaction_callbacks_in_order_defined = true` を有効にした環境で `after_commit` / `after_rollback` コールバックに渡した `prepend: true` が無視されるバグを修正。`set_options_for_callbacks!` の呼び出し側で `prepend_option` を強制上書きしていた設計を改め、コールバック種別を第1引数で渡す形式に変更することで、ユーザーの意図したオプションが正しく尊重されるようになった。
Mailgun Action Mailboxのイングレスで、不正なタイムスタンプを含むリクエストが`ArgumentError`によりサーバーエラーになっていた問題を修正。タイムスタンプのパースに`Integer(timestamp, exception: false)`を導入し、HMAC署名用の生文字列と整数変換済みの値を分離することで、不正リクエストを意図通り`401 Unauthorized`として拒否するようになりました。
MySQL系アダプター(`mysql2`、`trilogy`)のテスト実行時に、`abstract_mysql_adapter` 配下のテストが自動収集されない問題が修正されました。`activerecord/test/support/tools.rb` の `list_tests` メソッドに `case` 文による明示的な列挙ロジックが追加され、共通の抽象アダプター層のテストが漏れなく実行されるようになります。
`ActiveSupport::TimeZone::MAPPING` 内の廃止されたIANA識別子 `Europe/Kiev` と `Asia/Rangoon` を、正規名である `Europe/Kyiv` と `Asia/Yangon` へ置き換えました。ActiveSupport側のキー名(`"Kyiv"`・`"Rangoon"`)は変更されないため既存コードへの影響はなく、最新のtzdata環境でのタイムゾーン解決が確実に動作するようになります。
`ActiveSupport::ClassAttribute`の実装が、値をクロージャに閉じ込める方式から、オーナークラスのインスタンス変数で管理する方式へと再設計されました。クラス自体はRactor間で共有可能なため`Ractor.shareable_proc`でwrapでき、ivarのRactorセマンティクスも自然に適用されます。パフォーマンスへの影響は10%未満に収まっており、シングルトンクラスへの代入時に`instance_reader: false`が無視されるバグも同時に修正されています。
FormBuilderに`f.datalist`メソッドが追加され、`<datalist>`要素をモデルの命名規則に沿ったIDで自動生成できるようになりました。`field_id`メソッドによるID導出を活用し、`text_field`の`list:`属性との紐付けをフレームワーク側で管理できます。内部では既存の`datalist_tag`に委譲するシンプルな実装で、ラベル・値ペア形式の選択肢など既存機能もそのまま利用可能です。
`Rails.cache.read` に `delete: true` オプションが追加され、`RedisCacheStore` でRedisの `GETDEL` コマンドを使ったアトミックな読み取りと削除が可能になりました。OTPコードやワンタイムトークンなど「一度しか消費できない値」の管理で発生しがちな競合状態を根本から排除できます。`LocalCache` レイヤーではRedisへの直接アクセスとインメモリキャッシュの削除も適切に処理されており、他のキャッシュストアでは暗黙的に無視される設計です。
`ActiveModel::SchematizedJson` が内部で使用する `String#remove` メソッドの依存が暗黙的だったため、`active_model` を単体でrequireした環境で `has_json` アクセサが `NoMethodError` を発生させていた問題を修正。`schematized_json.rb` に `active_support/core_ext/string/filters` のrequireを1行追加し、依存関係を明示化することで解消しました。
Rails.app.creds の多段解決機能を活用し、Active Record Encryption の暗号化キー(primary_key、deterministic_key、key_derivation_salt)を ACTIVE_RECORD_ENCRYPTION__* という規約名の環境変数で直接指定できるようになりました。railtie が app.credentials.dig から app.creds.option に切り替わることで、config/application.rb に手動設定コードを記述する必要がなくなります。
Action Viewに `datalist_tag` ヘルパーが追加され、HTML `<datalist>` 要素をRailsの流儀で簡潔に生成できるようになりました。既存の `options_for_select` と同じ書式でオプションを指定できるため、`content_tag` をネストして記述していたボイラープレートを解消できます。
`ActionController::Parameters` に `fetch_values` メソッドが追加され、複数のパラメータを一度に取得できるようになりました。Ruby の `Hash#fetch_values` と同様のインターフェースを持ち、ブロックなしの場合は `ActionController::ParameterMissing` を raise します。内部実装では `Hash#fetch_values` に委譲しつつ、シンボル/文字列キーの同一視やパーミッション状態の引き継ぎも適切に処理されています。
Active StorageのVipsおよびImageMagickアナライザで、EXIFミラー方向(orientation 2, 4, 5, 7)を持つ画像のblobメタデータに記録される幅・高さが誤っていた問題を修正しました。`rotated_image?`が判定する向きのセットを、実際に90°/270°の回転を伴うorientation 5, 6, 7, 8のみに修正することで、フリップのみの向き(2, 4)では寸法を入れ替えず、フリップ+回転の向き(5, 7)では正しく入れ替えるようになります。