2023 年 4 月 28 日,星期五

2023 年 4 月下旬版

作者:zzak

大家好,我是 zzak。✈️ RailsConf 现已落下帷幕,日本的黄金周也即将来临。本周 Rails 要闻回顾有很多内容值得关注。

许多文档改进以增强我们的 SEO 态势
备受尊敬的 @p8 一直在努力改善 Rails 文档在搜索引擎中的表现。

关于文档,PostgreSQL 指南新增了关于 INCLUDEUNIQUEEXCLUDE 的新章节。

仅展开第一层以保留 Enumerable#in_order_of 中的嵌套内容
这是一个很好的例子,一位开发者在用 Rails 主分支积极测试他们的应用程序时发现了这个 bug,甚至还提交了一个补丁!干得漂亮!

修复 pg 1.5.0 弃用警告
使用最近发布的 pg gem 版本 1.5.0 时会出现此警告。此 PR 已向后移植,因此下一个次要版本应该会解决这个问题!

如果 ActiveSupport::Cache 键为空,则始终引发 ArgumentError
例如:

@cache.read(nil) #=> ArgumentError

此 PR 确保我们对所有存储实现中的空键都始终引发异常。

使 Rails cookies 符合 RFC6265 标准,使用 domain: :all
当存在 domain: :all 选项时,Rails 错误地在 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 回调运行后,updated_at 时间戳会得到更新,无论发生何种变异,包括 before_update

使用 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 难以理解。

使用 add_foreign_key 时的 deferrable: true 已弃用,取而代之的是 deferrable: :immediate,并将在 Rails 7.2 中移除。

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

此 PR 将 intersects? 的委托添加到 Relation 中,这修复了 Rubocop 在 CollectionProxy 上出现误报的问题。

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

您可以在 这里查看所有更改。
上周,有 30 位贡献者为 Rails 代码库做出了贡献!

下次再见!

订阅以通过邮件获取这些更新。