2024/05/28分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
Make source_reflection return nil when no name
activerecord/lib/active_record/reflection.rbの修正です。
source reflectionが取得出来なかった場合に、ActiveRecord::Reflection::ThroughReflectin#source_reflectionをexceptionをraiseしていたのを、nilを返すよう修正しています。リリース済みのバージョンではnilを返すようになっていたのですが、 Use symbols as keys for _reflectionsで挙動を変わってしまい、再度nilを返すよう戻しています。
Add ActiveRecord::Relation#readonly?
activerecord/lib/active_record/relation.rbの修正です。
relationがreadonlyかどうかをチェックするためのActiveRecord::Relation#readonly?メソッドを追加しています。
Edit pass on 7.2 release notes
rails guideのRuby on Rails 7.2 Release Notesの修正です。
Highlights部分に説明を追加、及び、guide全体のグラマー、言い回しの修正を行っています。
Make the Relation -> Model delegation stricter
Active Recordの修正です。
ActiveRecord::Relationのmissing methodsをmodel classに自動でdelegateする処理に依存している箇所を、modelのメソッドを呼び出している箇所は明示的にmodelを使用するよう修正しています。この処理に依存するのはバグになりやすく、Rails内部の処理は依存しないようにする為。Railsのテストではこのdelegateに依存してる箇所があった場合エラーになるように変更しています。なお、この処理に依存しているgemがあると思われる為、アプリケーションコードではエラーにならない(元と同じ挙動)になるようになっています。
Explictly take a block in Arel add_bind
activerecord/lib/arel/collectors/bind.rbの修正です。
Arel::Collectors::Bind#add_bindのメソッド定義で、明示的にblock引数を受け取る旨指定を追加しています。指定が無いとRuby 3.4でunused blockに関するfalse positiveでエラーになってしまう為。
Unify Relation#klass and Relation#model
Active Recordの修正です。
Relation#klassを使用している箇所をRelation#modelを使用するよう統一しています。aliasなのでどちらを使用しても挙動は変わらないのですが、klassは名前が良くなく、かつ、両方が使われているとコードを読む際に混乱する為、Relation#modelを使用するよう統一した、との事です。なお、これはRailsのコード内のことで、アプリケーションとしては引き続きどちらも使用出来るようになっています。
Let's use the delegation to the transaction manager here
activerecord/lib/active_record/connection_adapters/abstract/database_statements.rbの修正です。
transactionメソッド内でwithin_new_transactionメソッドを呼び出す際に明示的にreceiverを呼び出していたのを、暗黙のdelegate処理に依存するよう修正しています。他のメソッド呼び出しと挙動を合わせる為。
Rewrite unless/else as if/else
activerecord/lib/active_record/connection_adapters/sqlite3/database_statements.rbの修正です。
internal_exec_queryメソッド内のunless/elseをif/elseを使用するよう修正しています。