2024 年 12 月 14 日,星期六

新的 Rails 教程和解包视频、发布、ActiveModel::Attributes::Normalization 以及更多!

由 vipulnsward 发布

大家好,周六快乐!

Vipul 在这里为您带来本周 Rails 的最新动态。让我们开始吧!

本周,Rails 基金会发布了一系列更新的资源,帮助您学习新的 Rails 8 默认配置,包括全新的 入门教程、一个 9 部分的 YouTube 系列视频,以及更新的 Rails Guides。

在此处阅读公告。此外,安装指南也已分离,使其更容易找到,并包含使用版本管理器安装 Ruby 的基础知识——这可以说是新手的最大障碍之一。

Rails 版本 7.0.8.7、7.1.5.1、7.2.2.1 和 8.0.0.1 已发布!
这些是安全补丁,解决了在使用 `content_security_policy` 助手处理不受信任的用户输入时可能导致绕过浏览器内容安全策略的一个新问题。

Rails 版本 8.0.1 已发布!
还有一个新的次要版本——8.0.1,也已发布!前往 CHANGELOG,查看此版本中的所有更改。

Doximity 案例研究——快速、灵活且可扩展
我们还有一个新的官方案例研究!了解 Rails 如何为 Doximity 的医疗保健平台提供支持。以下是研究中的一些亮点:

  • Rails 加速开发:Doximity 的团队能够快速迭代新产品和功能,帮助医生节省时间并专注于患者护理。
  • Rails 确保长期稳定性:通过维护和发展他们使用了 15 年的单体应用,Doximity 避免了重写。
  • Rails 随成功而扩展:随着 Doximity 的发展,Rails 帮助优化了 45 多个应用程序的性能,并轻松处理不断增长的流量。

接受 `ActiveJob::ConfiguredJob#perform_later` 的块
此拉取请求增加了对接受 `ActiveJob::ConfiguredJob#perform_later` 的块的支持。这之前与常规的 `ActiveJob::Base#perform_later` 不一致。

修复外键添加和移除的 `if_exists` / `if_not_exists`
此 PR 解决了外键添加/移除和 `if_exists/if_not_exists` 的一些改进。

  • 如果自定义列上存在外键,并且使用了带有 `if_not_exists` 的默认列上的 `add_foreign_key`,则会引发错误。
  • 使用 `if_not_exists` 添加外键时,没有考虑 `:primary_key`。
  • 使用 `if_exists` 移除外键时,没有考虑自定义列。

更改列的可空性不会改变默认函数
此拉取请求修复了更改列的可空性时 `MySQL` 默认函数被删除的问题。

将 `ActiveRecord::Normalization` 迁移到 Active Model
`ActiveRecord::Normalization` 已迁移到 Active Model。此更改将 `ActiveRecord::Normalization` 向后移植到 `ActiveModel::Attributes::Normalization`。通过此更改,我们现在可以在 PORO 中使用此功能,并通过 `ActiveModel::Attributes::Normalization` 使用——

class User
  include ActiveModel::Attributes
  include ActiveModel::Attributes::Normalization

  attribute :email, :string

  normalizes :email, with: -> email { email.strip.downcase }
end

user = User.new
user.email = " CRUISE-CONTROL@EXAMPLE.COM\n"
user.email # => "cruise-control@example.com"

将 `ActionText::RichText#embeds` 赋值更改为 `before_validation`
在此更改之前,`embeds` 关联的赋值发生在验证回调 **之后**,因此无法纳入富文本相关的文件验证。

SQLite3:将默认函数用作默认插入值
先前,如果列定义了一个函数作为其默认值,在插入 fixture 时该函数永远不会被调用。现在,此添加使其按预期工作。

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

下次再见!

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