大家好,我是 Greg,带大家回顾一下 2021 年 Rails 世界发生的事情。
发生了很多变化,很难决定要提及哪一个,但我尽力找到了一些值得注意的变化。
查找并断言正好有一个记录存在
添加了 FinderMethods#sole 和 #find_sole_by 来查找并断言正好有一个记录存在。基于此,Enumerable#sole 返回可枚举对象的唯一项。如果不存在项或存在多个项,它将引发异常。
添加 ActionController::Live#send_stream
增加了像 send_data 处理静态文件一样,将二进制数据实时流式传输到浏览器的能力。
添加 Model.update!,类似于 Model.update 但会引发异常
你可能熟悉实例方法 Model#update!,但现在你可以在类上执行此操作了!
Active Record destroy_all 按批次执行
默认情况下,它将以 100 条记录为一批加载,并允许指定自定义批次大小。
为 Action Mailbox 添加配置 Active Storage 的可能性
现在可以通过 config.action_mailbox.storage_service 为存储电子邮件原始源配置 Active Storage 服务。
对未授权的开放重定向引发错误
向 redirect_to 添加了 allow_other_host_ options。可以使用 ActionController::Base.raise_on_open_redirects = true 选择此行为。
更新 Capybara 驱动程序
弃用系统测试的 poltergeist 和 webkit (capybara-webkit) 驱动程序注册(它们将在 Rails 7.1 中移除),并改为添加 cuprite。
当 ActiveRecord::NoDatabaseError 时通过 UI 创建数据库
此 PR 增加了在开发模式下数据库未创建时通过 UI 创建数据库的可能性。
添加 ActiveRecord::QueryMethods#in_order_of
#in_order_of 允许你根据 SQL 表达式指定返回记录的显式顺序,例如:Post.in_order_of(:id, [3, 5, 1])
Active Storage 的字节范围支持
此 PR 允许分块提供上传内容,以便将缓冲的文件流式传输,例如将音频播客从 S3 流式传输到 iPhone 所需。
用 ruby/debug 替换 Byebug
Ruby 3.1 将推出一个新的、一流的 调试器,它可以很好地与 Rails 配合使用。
让我们一起感谢 Byebug 多年来帮助我们发布软件。
为 “bin/rails dbconsole” 添加 PostgreSQL 的 SSL 支持
此 PR 修复了与 PostgreSQL 一起使用时 dbconsole 命令对加密连接的支持。
引入 ActiveModel::API
将 ActiveModel::API 作为与 Action Pack 和 Action View 通信的最小 API。这将允许向 ActiveModel::Model 添加更多功能。
GitHub Codespaces 配置
此 PR 增加了对 GitHub Codespaces 的支持,这使得贡献者可以轻松启动一个功能齐全的环境来创建补丁和测试对 Rails 的更改。
标准化的错误报告接口
Rails.error 是一个新的错误报告接口,有两个基于块的方法。handle,它会吞没错误并将它们转发给订阅者。
Rails.error.handle do 1 + ‘1’ # 引发 TypeError end 1 + 1 # 这将被执行
record,它将错误转发给订阅者,但允许它继续回溯调用堆栈。
Rails.error.record do 1 + ‘1’ # 引发 TypeError end 1 + 1 # 这将不会被执行。
对于基于块的 API 不适用的情况,可以使用较低级别的 report 方法。
Rails.error.report(error, handled: true / false)
今年有 529 位了不起的人为 Rails 贡献了 3716 个提交!最近还发布了一个 新的 Rails 主要版本,其中包括 Active Record 的 At-Work Encryption、异步查询加载、Zeitwerk 代码加载器、更好的 CSS 和 Javascript 打包等功能,Rails 还拥有了新的网站和启动屏幕!
感谢大家,明年见!