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を使用するよう修正しています。