なるようになるブログ

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

rails commit log流し読み(2018/01/10)

2018/01/10分のコミットです。

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

activerecord/CHANGELOG.md


resolve inconsistencies between first and to_a.first with limit

activerecord/lib/active_record/relation/finder_methods.rbの修正です。

first(n) + limitメソッドを使用した場合に、limitに指定した値が無視されていた(指定した値で結果が制限されていなかった)のを、結果のレコード数がlimitに指定した値になるよう修正しています。

last(n) + limitを使用した場合と挙動を合わせる為。


Merge pull request #31534 from claudiob/kaspth-approach

rails newした際にActive Storage用のmigrationファイルが自動で生成されるようになっていたのを、生成しないよう修正しています。

代わりに、Active Storageを使用しようとして、Active Storage用のテーブルが存在しない場合、エラーメッセージにbin/rails active_storage:installを実行する旨説明を表示するよう修正しています。


Merge pull request #29685 from ayanko/fix-slow-name-error-missing-name

activesupport/lib/active_support/core_ext/name_error.rbの修正です。

NameError#missing_nameメソッドでmessageを取得する際に、original_messageが定義されていれば、そちらの値を使用するよう修正しています。

+    # Since ruby v2.3.0 `did_you_mean` gem is loaded by default.
+    # It extends NameError#message with spell corrections which are SLOW.
+    # We should use original_message message instead.
+    message = respond_to?(:original_message) ? original_message : self.message
+

上記コメントにもある通り、NameError#messagedid_you_meanによるスペル補正が入り、その分遅いためoriginal_messageを使用するようにしたとの事です。


Bring back passing single record support for Preloader

activerecord/lib/active_record/associations/preloader.rbの修正です。

Preloader#preloadメソッドのrecords引数に単一のrecordを渡せるよう修正しています。

Rails 5.1までは渡せるようになっていたのですが、PreloaderクラスはRails内部でのみ使用するクラスであり、Rails内部では必ずArrayで渡すようになっていたため、単一のrecordが渡された場合のケア(Array.wrapの呼び出し)は削除されていました。

ただ、Preloader#preloadメソッドを直接使用しているケースがあったらしい為(issueが作成された)、互換性の為に再度単一recordを渡せるよう戻しています。


Fix "the the " [ci skip]

docの修正です。

theが二回連続で記載されている箇所があったのを修正しています。


Clean up railties tests

railties/test/generators/app_generator_test.rbrailties/test/generators/shared_generator_tests.rbの修正です。

Don't include Active Storage migrations in new appsの対応により不要になったactive_storage:installのテスト、及び、不要なmigrationが生成されるかどうかのチェックを削除しています。


Merge pull request #16314 from zoltankiss/allow-nested-has-many-associations-on-unpersisted-parent-instances

activerecord/lib/active_record/associations/through_association.rbactiverecord/lib/active_record/reflection.rbの修正です。

has_many :through associationをnestして使用している場合に、親のインスタンスが永続化されていないと子のインスタンスから値が取得出来ないバグがあったのを修正しています。

class Post < ActiveRecord::Base
  belongs_to :author
  has_many :books, through: :author
  has_many :subscriptions, through: :books
end

class Author < ActiveRecord::Base
  has_one :post
  has_many :books
  has_many :subscriptions, through: :books
end

class Book < ActiveRecord::Base
  belongs_to :author
  has_many :subscriptions
end

class Subscription < ActiveRecord::Base
  belongs_to :book
end

上記のようなassociationが定義されていた場合に、postが永続化されていない場合にpost.subscriptionsが必ず空になってしまっていたのが、正しく値を取得出来るようになっています。


Fix stale_state for nested has_many :through associations

activerecord/lib/active_record/associations/through_association.rbactiverecord/lib/active_record/reflection.rbの修正です。

has_many :through associationをnestして使用している、かつ、through先のrecordが変更された場合に、reflectionの情報が正しくreloadされるよう修正しています。