2025年10月3日,星期五

虚拟列,真实的 bug 修复

发布者:Claudio Baccigalupo

你好,我是Claudio Baccigalupo。让我们一起来看看本周Rails代码库中的一些变更。

将PostgreSQL客户端版本升级到18

devcontainer中的PostgreSQL客户端版本现在指向PostgreSQL的最新发布版本,这非常棒,因为……

支持PostgreSQL 18+上的虚拟生成列

PostgreSQL 18支持虚拟(非持久化)列,可以在Rails迁移中通过stored: false添加。例如:

create_table :users do |t|
    t.string :name
    t.virtual :lower_name,  type: :string,  as: "LOWER(name)", stored: false
    t.virtual :name_length, type: :integer, as: "LENGTH(name)"
end

修复Enumerable#sole在元素为元组时的行为

恢复了原始行为,使得在元组上调用Enumerable#sole会返回整个元组(与Enumerable#first相同)。

当工作进程死亡时,避免并行测试挂起

当并行测试运行时,如果某个工作进程突然死亡,测试套件会永远挂起。此修复现在会跟踪进程ID(PID)以及工作进程ID,从而能够将死亡进程映射回其工作进程条目进行清理。

默认停止转义JSON中的JS分隔符

历史上,行分隔符(U+2028)和段落分隔符(U+2029)在JavaScript字面量字符串中无效,但在ECMAScript 2019中已更改,因此不再需要转义它们。

在新生成的应用程序中不输出弃用消息

防止在Newly generated applications中显示关于raise_on_open_redirects的弃用消息。

在单例上定义class_attribute时不引发NameError

在实例的单例类上定义class_attribute,然后通过实例访问该属性时,会引发NameError

将副本添加到测试数据库并行化设置中

用于并行测试的数据库的设置和配置现在包含副本。这修复了一个问题,即并行运行的集成测试会选择基础测试数据库而不是编号的并行工作进程数据库。

添加用于记录重定向源位置的设置

重定向使用非常广泛,并且通常为不同的目的(身份验证、授权、回退)定义在不同的位置。引入了一个新的配置设置action_dispatch.verbose_redirect_logs,用于记录所有重定向的源位置。

防止ActiveRecord#select生成重复的列

修复了Rails 8.1.0.beta1中一个问题,该问题是当在子查询中使用select并带有distinct时,会导致SQL错误。

优先使用changed_for_autosave?

修复了Rails 8.0.2中的一个回归问题,该问题是之前有效的模型通过autosave变得无效,因为一个远亲记录通过嵌套属性被删除。

清除belongs_to中的可选复合键应保留主键

修复了Active Record中的一个问题,该问题是尝试取消设置复合外键关联时会引发错误。

您可以在此处查看所有更改的列表。 上周我们有15位贡献者为Rails代码库做出了贡献!

下次再见!

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