嗨,我是 Greg。让我们了解本周 Rails 代码库中的更改。
在 IRB 的最新官方 API 上构建 Rails 控制台
Rails 控制台是在 IRB 基础上构建的,但由于缺少扩展 API,因此它通过补丁程序对其进行扩展。由于 IRB 最近收到了很多改进和一个扩展 API,因此此 Pull 请求将 Rails 控制台更改为基于此进行构建。这将使 Rails 帮助程序在帮助消息中显示,其中还有其他好处。
将 app:update 变成一个添加 –force 的命令
此 Pull 请求将 app:update
任务更改为一个 Rails 命令,然后为其添加 --force
标记,以允许运行 bin/rails app:update
,同时接受它做出的所有更改。
修复对于具有复合主键的模型的 includes+references
的计数查询
由于 SQLite 和较旧的 MySQL 不支持将 COUNT DISTINCT
与多列一起使用,因此使用复合主键运行计数查询会导致错误。此 Pull 请求将其更改为使用子查询。
允许报告无断言测试
非常容易编写实际什么都不测试的“假阳性”错误测试(或者将来可能变成这样)。一个简单的示例
def test_active
active_users = User.active.to_a
active_users.each do |user|
assert user.active?
end
end
仅在作用域返回至少一个用户时才运行断言。此 Pull 请求中的更改允许轻松检测何时不运行此类断言。在以下配置下,无断言测试将被标记为失败,而不是静默通过。
config.active_support.assertionless_tests_behavior = :raise # also available :ignore and :log
在 ActiveRecord 中添加对递归公共表表达式的支持
尽管 Rails 7.1 已添加对编写公共表表达式 (CTE) 的支持,但此支持并未扩展到递归 CTE。此 Pull 请求添加了一个 QueryMethods#with_recursive
构造,以启用递归 CTE。
向 PostgreSQL 适配器添加 Date 解码器
此 Pull 请求向 PostgreSQL 适配器添加了一个 Date 解码器,以在连接级别对日期进行类型转换,因此当运行原始查询时,列将被转换为日期而不是字符串。之前
ActiveRecord::Base.connection.select_value("select '2024-01-01'::date").class
#=> String
之后
ActiveRecord::Base.connection.select_value("select '2024-01-01'::date").class
#=> Date
此更改使 PostgreSQL 适配器在(日期方面)与 Mysql2 适配器保持一致。
删除所有已弃用的代码
此 Pull 请求从代码库中删除了 7.1 中所有已弃用的代码。
您可以在此处查看完整更改列表 here。上周有 30 位贡献者 参与了 Rails 代码库的开发!
下次再见!
订阅,以接收通过邮件发送的这些更新信息。