なるようになるブログ

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

rails commit log流し読み(2022/11/02)

2022/11/02分のコミットです。

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

activerecord/CHANGELOG.md


Allow specifying columns to use in ActiveRecord::Base object queries

Active Recordの修正です。

Active Recordのobjectで実行されるqueryで、必ず使用されるカラムをclassに定義出来るよう修正しています。 定義はquery_constraintsメソッドで行えるようになっており、定義したカラムは、更新、削除、再読込の際に使われるようになっています。

class Developer < ActiveRecord::Base
  query_constraints :company_id, :id
end

developer = Developer.first

developer.update!(name: "Nikita")
# => UPDATE "developers" SET "name" = 'Nikita' WHERE "developers"."company_id" = 1 AND "developers"."id" = 1

developer.update!(company_id: 2)
# => UPDATE "developers" SET "company_id" = 2 WHERE "developers"."company_id" = 1 AND "developers"."id" = 1

developer.name = "Bob"
developer.save!
# => UPDATE "developers" SET "name" = 'Bob' WHERE "developers"."company_id" = 1 AND "developers"."id" = 1

developer.destroy!
# => DELETE FROM "developers" WHERE "developers"."company_id" = 1 AND "developers"."id" = 1

developer.reload
# => SELECT "developers".* FROM "developers" WHERE "developers"."company_id" = 1 AND "developers"."id" = 1 LIMIT 1

default_scopeと違い、query_constraintsで定義されたのが使われるのは、単一のActive Record objectで実行されるqueryのみになっています。


Merge pull request #46386 from lazaronixon/fix-has-one-create-record

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

singular associationの作成処理で、古いassociationの削除と新しいassociationの作成を同じtransaction内で行うよう修正しています。


Merge pull request #46333 from radar/timezone-canberra

activesupport/lib/active_support/values/time_zone.rbの修正です。

time zoneのmappingで、Canberraのtime zone idがおかしかかったのを修正しています。


Merge pull request #46395 from jonathanhefner/active_job-deprecator

Active Jobの修正です。

Action Job専用のdeprecator(ActionJob.deprecator)を追加、及び、Action JobでActiveSupport::Deprecationを使用していた箇所を、ActionJob.deprecatorを使用するよう修正しています。ActionJob.deprecatorRails.application.deprecators追加されるようになっており、Rails.application.deprecators[:action_job]で参照出来るようになっています。


Merge pull request #46396 from jonathanhefner/active_storage-deprecator

Active Storageの修正です。

Action Storage専用のdeprecator(ActionStorage.deprecator)を追加、及び、Action StorageでActiveSupport::Deprecationを使用していた箇所を、ActionStorage.deprecatorを使用するよう修正しています。ActionStorage.deprecatorRails.application.deprecators追加されるようになっており、Rails.application.deprecators[:action_storage]で参照出来るようになっています。


Invalidate transaction as early as possible

activerecord/lib/active_record/connection_adapters/abstract/transaction.rbactiverecord/lib/active_record/connection_adapters/abstract_adapter.rbの修正です。

TransactionRollbackErrorが発生した場合に、transactionsの無効化処理が可能な限りはやく行うよう修正しています。transactionがそのままだと、違うエラー(Mysql2::Error: SAVEPOINT active_record_%n% does not existなど)が発生してしまう可能性があり、それを避けるよういにする為。


Merge pull request #46243 from shouichi/clear-locking-column-on-dup

activerecord/lib/active_record/locking/optimistic.rbの修正です。

dupでobjectを複製した場合に、複製したobjectのlocking column(e.g. lock_version)の値をclearするよう修正しています。


Update docs for ActiveRecord::AttributeMethods#[]=

activerecord/lib/active_record/attribute_methods.rbのdocの修正です。

ActiveRecord::AttributeMethods#[]=メソッドのdocに、protectedな#write_attributeのaliasである旨説明があったのですが、#write_attributeはpublic APIである、かつ、独自のdocも記載されており、誤っているかつ不要と思われる説明との事で削除されています。