2020/03/29分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Add
ActiveRecord::Base#previously_new_record?
to show if a record was new before the last save. - Add support for
if_not_exists
option for adding index.
Merge pull request #36276 from basecamp/previously-new-record
Active Recordの修正です。
最後のsave前に、レコードが新規に作成されたレコードがどうかをチェックするためのpreviously_new_record?
メソッドを追加しています。
User.new.previously_new_record? # => false User.create.previously_new_record? # => true User.find(1).previously_new_record? # => false
Active Support、railtiesの周辺です。
Active Supportで使用しているTZInfoのバージョンを2系に更新しています。
TZInfo v2では、元々必ずUTCになっていたoffsetが、local timesに一致した適切な値になるようになりました。これはActiveSupport::TimeZone#utc_to_local
も同様の結果になるようになっています。
before
zone = ActiveSupport::TimeZone["Eastern Time (US & Canada)"] zone.utc_to_local(Time.utc(2000, 1)) #=> 1999-12-31 19:00:00 UTC
after
zone = ActiveSupport::TimeZone["Eastern Time (US & Canada)"] zone.utc_to_local(Time.utc(2000, 1)) #=> 1999-12-31 19:00:00 -0500
ただこれは、Railsアプリケーションとしてはbreaking changesになってしまう為、この値をコントロールするためのフラグ(config.active_support.utc_to_local_returns_utc_offset_times
)を追加し、このフラグがfalseの場合は元の挙動、trueの場合はTZInfo v2と同じ挙動になるよう対応しています。
rails guideのActive Job Basics
の修正です。
Job Execution
の項のグラマーの修正を行っています。
Accept and default to base64_urlsafe CSRF tokens (#18496)
actionpack/lib/action_controller/metal/request_forgery_protection.rb
の修正です。
CSRFトークンを生成するのにBase64 strict-encodedを使用していたのを、base64_urlsafe
メソッドを使用してwebsafeな値になるよう修正しています
strict-encodedだと+
や/
などの値が含まれてしまい、CSRFトークンの値をcookieで使用したいような場合に問題があった為。
Sort results to fix nondeterministic test failures
assertionで値を比較する際に、値をidでsortしてからチェックするよう修正しています。 sortを指定しないと結果が不定になる為。
activerecord/test/cases/associations/has_many_through_associations_test.rb
の修正です。
Add support for if_not_exists
to indexes
Active Recordの修正です。
add_index
メソッドに、indexが存在しない場合のみ処理を実行するようにするための、if_not_exists
オプションを追加しています。
add_index :users, :account_id, if_not_exists: true