Rails 4.2.10 の変更点

Rails 4.2.9 から 4.2.10 にかけての変更点をまとめます。

rails/rails
rails - Ruby on Railsgithub.com

Rails 4.2.9 の変更点
Rails 4.2.8 から 4.2.9 の変更点について、前回に引き続き、自分用にまとめておくことにしました。medium.com

actionpack

パスを処理する中でエンコーディングを保持するための変更が差し戻され、更に常に UTF-8 で扱われるようになった

パスを処理する中でエンコーディングが変わってしまうという問題があり、これについて Rails 4.2.9 で修正が加えられました。しかし、これは加えるべき変更ではなかったとして今回差し戻されました。

更に、Ruby 2.0.0 では文字列リテラルの先頭以外で ASCII-compatible で ASCII-8BIT エンコーディングな文字列を展開した際 (例: “foo #{‘bar’.b}”) に文字列全体のエンコーディングが UTF-8 ではなく ASCII-8IT になるという違いがあり、バージョン間の挙動を統一するために、ここでは常に UTF-8 エンコーディングの文字列が返されるように変更されました。

Restore previous behavior of normalize_path · rails/rails@a7d49ef
While this is going to break what we were trying to fix in GitHub code, ultimately this returns Rails 4.2 to it's…github.com

activerecord

joins が引数の scope の状態に左右されなくなった (但し unscoped を除く)

activerecord 4.2.8 で、unscoped が joins にきちんと影響するように変更が加えられましたが、この変更が原因で scope の状態が全て joins に影響するようになってしまいました。scope の joins への影響の是非はともかくとして、Rails 4.2 で挙動の変更が加えられるのは避けるべきだとして修正が加えられ、unscoped を除く scope の状態は joins に影響しなくなりました。

Post.joins(:users) should not be affected by `User.current_scope` · rails/rails@5e7fc65
This change was introduced by #18109. The intent of that change was to specifically apply `unscoped`, not to allow all…github.com

mysql adapter で precision 付きの datetime 型を正しく扱えるようになった

表題の通りで、mysql2 adapter に加えて mysql adapter でも、precision (精度) 付きの datetime 型のフィールドを正しく扱えるようになりました。Rails 5 では mysql adapter は廃止されます。

4-2-stable: Fix datetime with precision for mysql adapter by kamipo · Pull Request #30651 ·…
It will pass isolated test (test per file), but somehow created t.datetime :written_on, precision: 6 causes any side…github.com