您好,我是 Greg。让我们一起看看本周 Rails 代码库的更改。
在 IRB 的最新官方 API 上构建 Rails 控制台
Rails 控制台建立在 IRB 的基础上,但由于缺乏扩展 API,它通过 monkey patching 来扩展 IRB。最近 IRB 进行了大量改进并引入了扩展 API,此拉取请求将 Rails 控制台改为基于该 API 构建。这将使 Rails 助手等内容出现在帮助消息中,等等。
将 app:update 转换为一个支持 --force 的命令
此拉取请求将 app:update 任务改为 Rails 命令,然后为其添加了 --force 标志,允许在运行 bin/rails app:update 时接受它所做的所有更改。
修复带有复合主键模型的 includes+references 上的 count 查询
由于 SQLite 和旧版 MySQL 不支持对多个列使用 COUNT DISTINCT,因此使用复合主键运行 count 查询会导致错误。此拉取请求将它们更改为使用子查询。
允许报告无断言测试
很容易编写一个“假阳性”的失败测试,它实际上什么都没有测试(或者将来可能变成这种情况)。一个简单的例子
def test_active
active_users = User.active.to_a
active_users.each do |user|
assert user.active?
end
end
仅当 scope 返回至少一个用户时,才会运行断言。此拉取请求中的更改允许轻松检测何时未运行此类断言。使用以下配置,无断言测试将被标记为失败,而不是静默通过。
config.active_support.assertionless_tests_behavior = :raise # also available :ignore and :log
在 ActiveRecord 中添加对递归公用表表达式的支持
虽然 Rails 7.1 已添加了编写公用表表达式 (CTE) 的支持,但此支持不包括递归 CTE。此拉取请求添加了一个 QueryMethods#with_recursive 构造函数来启用递归 CTE。
向 PostgreSQL 适配器添加 Date 解码器
此拉取请求向 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 适配器保持一致。
删除所有已弃用的代码
此拉取请求从代码库中删除了 7.1 中所有已弃用的代码。
您可以在此处查看所有更改的列表。 在上周,有 30 位贡献者为 Rails 代码库做出了贡献!
下次再见!
订阅以通过邮件获取这些更新。