2023 年 5 月 26 日,星期五

本周 Rails — 2023 年 5 月 26 日

作者:zzak

大家好!我是 zzak,又一期“本周 Rails”来了。

提醒:Rails World 的 CFP 将于 6 月 16 日截止。
无论您是经验丰富的开发者还是 Rails 生态系统的新手,我们都鼓励您提交展示前瞻性想法、挑战 Rails 可能性的提案。

Rails 7.0.5 已发布
如果您错过了,Rails 7.0 系列的错误修复版本已经发布。

优化 MemoryStore 性能
此 PR 优化了 `MemoryStore::DupCoder` 的内部 API,以避免在读写复杂对象时进行不必要的工作。

重构错误高亮检测
在此次提交之前,某些 `render` 调用会硬编码错误高亮为“不可用”。这导致一些错误页面显示“您应该安装错误高亮”的消息,即使正确版本的错误高亮已安装。

为命名空间使用 RDoc 的短格式定宽表示法
我们进行了一些工作,将“Some::Namespace::Thing”替换为 RDoc 支持的更短的“+…+”语法。
这只是提醒编写文档的人,几乎所有不包含括号、空格或原始“字符串”的定宽代码都可以使用此语法。这对于直接查看代码(或编写代码)的读者来说,视觉效果更好。

自动将引擎中的“test/fixtures”添加到“fixture_paths”
此 PR 利用了最近添加的 `TestFixtures#fixture_paths` 功能,以便您的应用程序使用的任何引擎的 fixture 都能自动加载。

修复二进制序列化列的“change_in_place?”
当向存储在 blob 列中的序列化属性提供 unicode 字符时,会出现一个 bug,导致该属性始终显示已发生更改。

使用“app:template”命令运行“after_bundle”块
应用程序模板可能包含 `after_bundle` 块,这些块应在模板执行完毕,运行 `bundle install` 之后执行。例如:

gem "devise"

after_bundle do
  generate "devise:install"
end

“ERB::Util.html_escape_once”现在始终返回一个“html_safe”字符串
此方法以前会保留字符串在返回值中的 `html_safe?` 属性。然而,由于此字符串已经过转义,因此将其标记为 `html_safe` 会导致实体被双重转义。在此更改之前,它会被双重转义并渲染为:

<p>this &amp;amp; that &amp;amp; the other</p>

在此更改之后,它将正确渲染为:

<p>this &amp; that &amp; the other</p>

弃用“SafeBuffer#clone_empty”
此内部方法自 2014 年(Rails 4.2.0)最后一个调用者被移除以来,在 Rails 代码库中一直未使用。

添加“Arel::Nodes::Cte”以用于 WITH 表达式
虽然 Arel 仍然是私有 API,但此 PR 仍然值得注意。此添加使 `with` 方法能够接受通用表表达式 (CTE),为生成的 SQL 语句添加 `MATERIALIZED` 或 `NOT MATERIALIZED` 提示。
Postgres 和 SQLite 都支持 CTE 语法的非标准扩展,以指示 CTE 子查询应被物化,即不折叠到主查询中,而是单独评估。在查询规划器否则会做出糟糕决策的情况下,这可能很有用。

弃用“assert_enqueued_email_with”的“:args”参数
在使用 `assert_enqueued_email_with` 测试 Action Mailer 时,您应该使用 `:params` 关键字参数来传递一个选项哈希给邮件程序。例如:

assert_enqueued_email_with MyMailer, :my_method, params: { my_param: "value" }

修复分隔的授权标头中空值的问题
此处的 bug 发生在包含空值(例如 `,,,`)的分隔 `Authorization` 标头值时,会产生 `ArgumentError`,导致 500 错误响应。

添加“ActiveRecord.disconnect_all!”以关闭所有连接
这基本上是 `ActiveRecord::Base.connection.disconnect!` 的多数据库感知版本。如果我们还没有连接到数据库,它还会避免连接。这对于在 `establish_connection` 使用后重置状态可能很有用。

改进 app 生成器的 JS 和 CSS 选项
使用 `--javascript` 和 `--css` 标志生成新 Rails 应用程序的用户体验在此处得到了改进。查看 PR 中的表格,其中更详细地解释了行为更改。

模型生成器的源路径应允许自定义
此 PR 恢复了一个旧的 PR,该 PR 已被时间遗忘,并增加了测试和抑制了警告。看到有人能解决自己的问题并回收旧 PR 的代码总是一件好事。并非所有东西都需要重新发明!

更新所有三个 en.yml 文件中与布尔值相关的注释
我之所以提到这一点,是因为这是 @justinperkins 对 Rails 的第一个 PR!他们已经修复了生成区域文件中的注释。恭喜!

使测试环境在响应中显示可捕获的异常
本周的最后一个 PR 正在更改 `config.action_dispatch.show_exceptions` 选项的行为,以使用新的“可捕获”选项,该选项仅在测试环境中显示可捕获的异常(例如 `ActiveRecord::RecordNotFound`)。

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

下次再见!

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