金曜日、2023 年 4 月 28 日

2023 年 4 月末のエディション

投稿者: zzak

こんにちは、zzakです。✈️ RailsConf の幕が下り、日本ではゴールデンウィークが始まりました。今月の Rails の動向で注目するべきことがたくさんあります。

検索エンジン最適化の向上に向けたドキュメントの大幅な改善
敬愛する@p8は、検索エンジンにおける Rails のドキュメントの評価を改善するという大きな取り組みにものすごく忙しくしてきました。

ドキュメントといえば、PostgreSQL ガイドINCLUDEUNIQUEEXCLUDE に関する新しいセクションが追加されました。

Enumerable#in_order_of でネストを保持するために最初のレベルのみをフラット化
これは、開発者が、実際に Rails のメインブランチに対してアプリケーションをテストしてこのバグを発見し、パッチを送信したという素晴らしい例です。素晴らしい成果です!

pg 1.5.0 の非推奨警告を修正
この警告は、最近リリースされたpg gem バージョン 1.5.0 を使用しているときに発生します。PR がバックポートされたので、次のポイントリリースでこの問題は解決するでしょう!

ActiveSupport::Cache キーが空白の場合にArgumentError を一貫して発生させる
たとえば、

@cache.read(nil) #=> ArgumentError

この PR により、すべてのストア実装で一貫して空白キーでエラーが発生するようになります。

Rails Cookie を domain: :all に準拠させて RFC6265 に準拠させる
Rails は、domain: :all オプションが存在する場合、Set-Cookie ヘッダーでCookie ドメイン値の先頭に追加のドットを付けていました。

この先頭のドットはRFC 2965(2000 年 10 月)に基づいた Cookie に必要でしたが、RFC 6265(2011 年 4 月)では動作が変更され、先頭にドットを付けるのは厳密には間違っています。今日のブラウザは、Cookie に関して RFC6265 に準拠するようになっています。Rails のdomain: :all 機能は、RFC6265 よりも古いです。

Active Job テストアサーションでのキュー名にシンボルを許可
この PR により、assert_enqueued_withassert_performed_withでシンボルと文字列の両方が受け付けられるようになります。

assert_enqueued_jobsassert_performed_jobs の変形ではすでに、両方が受け付けられています。

メソッド名である設定キーを設定するとエラーを発生させる
たとえば、

config.load_defaults = 7.0 #=> NoMethodError

するべきです。

config.load_defaults(7.0)

以前は、最初の例は黙って受け付けられていましたが、効果はありませんでした。

ActiveRecord::ConnectionAdapters::Mysql2Adapter にロードフックを追加
次のフックを使用して MySQL アダプタを拡張できるようになりました。

ActiveSupport.on_load(:active_record_mysql2adapter) do
  # change some behavior
end

この PR により、MySQL アダプタが PostgreSQL と SQLite3 に追いつきます。

修复 before_update 回调中未更新 updated_at
正如所述,此 PR 确保在所有 update 回调运行后且不管发生变动,包括 before_update 的情况下,updated_at 时间戳都会更新。

与 StringIO 一起使用 Rack::Test::UploadedFile.new 会导致异常
此 PR 修复了 Active Storage 中 Rack::Test::UploadedFileAttached::Changes::CreateOne#upload 的问题。

PostgreSQL 可接受 TableDefinition#references 的可延期外键选项
Rails 7.0 通过 add_foreign_key 方法增加了对可延期外键约束的支持,此 PR 也增加了对 t.references 的支持。

弃用“deferrable: true”选项,建议使用“deferrable: :immediate”
因为 deferrable: truedeferrable: :deferred 难以理解。

建议用 deferrable: :immediate 弃用与 add_foreign_key 搭配使用的 deferrable: true,且将在 Rails 7.2 中删除它。

为 ActiveRecord::Relation 添加对 Array#intersects? 的支持
Ruby 3.1 中添加了 intersects?,它等同于 (a & b).any?

此 PR 将 intersects? 的委托添加到 Relation,这样可修复 CollectionProxy 中 Rubocop 假阳性的问题。

为联接添加对 CTE 的支持
最后但绝对不是最不重要的,您现在可以在使用 .with 查询方法创建公共表表达式 (CTE) 时使用 joinsleft_outer_joins

您可以在这里查看整个更改列表。
在过去的一周,我们有30 位贡献者对 Rails 代码库做出了贡献!

下次见!

订阅可通过邮件接收这些更新。