2023 年 3 月 31 日,星期五

2023 年 3 月 31 日版 🌸

张贴者:zzak

嗨,我是 zzak,来自 日本青森,它是伟大的 Jonan Scheffler 的家乡。
2023 年已经正式过去了 25%,是时候享受 🌸 并探索本周 Rails 代码库中的更改了。

将 debug Gem 添加回 Gemfile 模板
随着今天 发布 Ruby v3.2.2,我们可以安全地将“debug”Gem 添加回为生成的 Rails 应用程序指定的 Gemfile 模板。

在存在 inverse_of 时推断 foreign_key
此 PR 使得 has_onehas_many 关联关系自动推断 foreign_key 选项,前提是在存在 inverse_of 选项时。

Action Cable:assert_broadcasts 返回播送的消息
此 PR 会让 Action Cable 的 assert_broadcasts 返回被播送的消息。

这样你可以更轻松地测试它们,比如

messages = assert_broadcasts("test", 2) do
  ActionCable.server.broadcast "test", { message: "one" }
  ActionCable.server.broadcast "test", { message: "two" }
end
assert_equal 2, messages.length
assert_equal({ "message" => "one" }, messages.first)
assert_equal({ "message" => "two" }, messages.last)

如果你希望播送大量消息或你只想针对数据的某些元素进行匹配,这对你有帮助;assert_broadcast_on 在这两种情况下都不适用。

Active Storage:适用于 js 库或框架中的直接上传安全
此 PR 允许支持从客户端直接上传时使用的其他标头,以支持多种类型的身份验证,例如 Bearer 令牌、API 密钥、基本身份验证、OAuth 1.0、摘要身份验证等。

将泽字节添加到 number_to_human_size
泽字节 (ZB) 已添加到 Active Support。

ActiveSupport::NumberHelper.number_to_human_size(1.kilobyte**7)
#=> "1 ZB"

在内容类型响应标头中设置字符集 (OWASP)
此 PR 确保字符集包含在从 Rails 发出的所有 Content-Type 标头中。

OWASP 建议每个 HTTP 响应包含一个带有安全字符集的 Content-Type 标头。

Active Storage:去除 mini_mime 用法,转而使用 marcel
减少一个需要担心升级的依赖项!

修复 Rails 生成的索引名称过长的问题
自动生成的索引名称现在限制为 62 个字节,符合 MySQL、Postgres 和 SQLite 的默认索引名称长度限制。

在 ActiveRecord::Base 上实现 marshal_dumpmarshal_load
为 Active Record 模型引入了更稳定和经过优化的 Marshal 序列化工具。

你可以通过 config.active_record.marshalling_format_version = 7.1 进行选择。

添加 ActiveSupport 加载挂钩,用于 ActionText::EncryptedRichText
以前 ActionText::RecordActionText::RichText 有专门的加载挂钩。
此 PR 为 ActionText::EncryptedRichText 添加了一个额外的钩子,以便外部库在子类加载后能够以同样简单的方式运行代码。

为 Backburner 任务实现 provider_job_id
此 PR 为 Beanstalk ActiveJob QueueAdapter 实现了 provider_job_id
例如,如果您希望能够取消任务

Beaneater::Job.new(
  Backburner::Connection.new(Backburner.configuration.beanstalk_url),
  {id: job.provider_job_id}
).delete

仅仅加载一次 Rake 任务以供命令建议
此 PR 之后,bin/rails --help 命令现在将仅仅列出框架和插件命令。在 lib/tasks/*.rake 文件中定义的 Rake 任务将不再包含在内。
对于那些任务的列表,请使用 rake -T

将 README 包含在 API 文档的主框架页面中
此 PR 教授 RDoc 将 Rails API 文档包含在内,以便为顶级常量包括每个相关的库 README。
以前,这些库模块中的许多模块在 API 文档中描述为空,因此现在它们拥有所有相关信息,这是一个很好的改进!

将 ActionController::Parameters 设为别名,但没有
此 PR 为 StrongParameters 上的 except 添加了对 without 的别名支持。

例如,现在您可以执行

@params[:person].without(:name)

@params[:person].except(:name)

Rubocop 标记片段
此 PR 添加了 rubocop-md 以清除所有标记文件。
确保指南中的任何代码片段也遵循 Rails 编码约定,而无需手动查看传入的每项更改。

将 markdownlint 添加至指南
作为对上一个 PR 的后续操作,现在指南中的所有标记内容都使用 markdownlint 进行清除。

允许销毁活动存储变体
在创建活动存储变体时,将插入 ActiveStorage::VariantRecord,然后上传文件。
如果上传失败,即使在数据库中存在 ActiveStorage::VariantRecord,文件也可能会丢失。
在这种情况下,我们现在可以通过此 API 删除仅一个变体的相应记录

attachable.variant(resize_to_limit: [100, 100]).destroy

允许可附加对象覆盖附件丢失时的默认模板
在呈现 ActionText 附件时,如果已经移除了底层的可附加对象,那么 Rails 当前会为所有可附加类型呈现 action_text/attachables/missing_attachable 部分。使用应用程序可以覆盖此部分,但它对所有可附加模型都是全局的。

现在,您可以在必要时呈现特定于模型的部分,例如,您可以为文件附件呈现占位符图像,或为用户附件呈现文本“已删除用户”。

您可以 在此处 查看完整变更列表。
上周,有 34 位贡献者 为 Rails 代码库做出贡献!

下次再见!

订阅 这些更新内容会通过邮件发送给您。