2021年11月21日,星期日

自动分片交换中间件、标准化的错误报告接口以及更多!

由 gregmolnar 发布

大家好,我是Greg,为您带来Ruby on Rails的最新消息。

支持不带 [action] 的 <form> 元素 默认情况下,当表单声明时没有 `action` 属性,浏览器会将表单字段编码到当前 URL 中。在此次提交之前,所有表单构建变体都不支持声明没有 `action` 属性的表单,`form_with`、`form_for` 和 `form_tag` 在省略 `url` 或 `action` 选项时都默认使用 `url_for({})`,但有了这个改动,当它们被设置为 `false` 时,表单将渲染而不带 `action` 属性。

在 button_to 辅助方法中支持 authenticity_token 选项 此 PR 增加了支持将 `authenticity_token` 选项传递给 `button_to`,方式与 `form_with` 和 `form_for` 调用中相同。

引入 field_name 视图辅助方法 `field_name` 辅助方法和对应的 `FormBuilder#field_name` 方法提供了一种符合 Action View 规范的方式来覆盖元素的 `name` 属性。例如,您可以这样做:

text\_field\_tag :post, :tag, name: field\_name(:post, :tag, multiple: true) # =\> \<input type="text" name="post[tag][]"\>

自动分片切换中间件 此 PR 添加了一个可用于自动分片切换的中间件。该设计类似于数据库选择器中间件,其中应用程序提供解析器来确定切换到哪个分片。选择器还接受选项(目前只支持 `lock`)来更改中间件的默认行为。

标准化错误报告接口 `Rails.error` 是一个新的错误报告接口,具有两个基于块的方法。`handle`,它会吞没错误并将其转发给订阅者

Rails.error.handle do 1 + '1' # raises TypeError end 1 + 1 # This will be executed

以及 `record`,它会将错误转发给订阅者,但允许它继续回溯调用堆栈。

Rails.error.record do 1 + '1' # raises TypeError end 1 + 1 # This won't be executed.

对于不适合基于块的 API 的情况,可以使用更底层的 `report` 方法。

Rails.error.report(error, handled: true / false)

使用 debug 过滤 SQL 日志中的属性 当 Rails 的日志级别设置为 `:debug` 时,会记录 SQL 查询,并且在此之前,在这种情况下,过滤的属性不会在日志中被屏蔽。有了这个改动,过滤的属性将在日志中被屏蔽为 `[FILTERED]`,但过滤仅在 `prepared_statement` 启用时应用。

加速集合渲染并为 jbuilder 中的多重获取集合处理添加支持 此 PR 通过利用 Action View 中现有的集合渲染器来加速集合渲染,并增加了对 `multifetch` 集合处理的支持,使其更高效。

自上次以来,有 33 人为 Rails 贡献了力量。我们无法涵盖所有更改,但您可以在 此处 查看所有更改。下次再见!