なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2024/05/28)

2024/05/28分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activerecord/CHANGELOG.md


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


Merge pull request #51932 from Shopify/relation-model