2023 年 9 月 15 日,星期五

Rails 本周动态:7.1 beta 版发布、Bun 支持以及更多内容!

Posted by greg

大家好,我是 Greg,我来给你们介绍 Rails 代码库中的最新变化。

Rails 7.1 beta 版发布
Rails 7.1 的第一个 beta 版已发布!自 Rails 7.0 以来,共有 800 多位贡献者提交了五千多次提交,因此此发行版中包含了许多新功能和改进。您可以在公告中阅读有关这些更改的摘要。

忽略环境文件(模板文件除外)
为了防止意外地将机密信息泄露到代码存储库,默认的.gitignore文件从现在起将排除.env(模板文件除外)文件。

明确的 primary_key: 选项始终应在关联中优先考虑
此 Pull Request 修复了以下问题:如果关联的模型配置了 query_constraints,则忽略 primary_key: 选项。现在, primary_key: 选项始终优先考虑,只有在没有 primary_key: 选项时,才会使用 query_constraints 来确定 association_primary_key 值。

检测活动记录事务
此 Pull Request 添加了一个新的 transaction.active_record 事件来跟踪 Active Record 托管的事务发生的时间。它在有效负载中包含连接(例如,在区分不同数据库的事务时很有用),

添加 Bun 支持
Bun 是 node.js 运行时、yarn 包管理器和 esbuild 捆绑器的替代品,它是一种新的可行选择。Bun 的主要区别特征是速度。它的速度通常比 node.js 等高出数倍。
由于大多数基本的 Rails 项目希望在此处和彼处简单地添加一些 JavaScript(但有时候希望比导入映射提供的 JavaScript 生态系统更好),因此 Bun 非常适合,并且可以轻松地被新 Rails 项目采用。

为复合主键添加专用指南
此 Pull Request 为复合主键用法添加了一个专用指南。
除了专用指南,#49218 还添加了有关在 :through 关联的连接表中使用复合主键的建议。

通过迁移帮助器支持复合外键
Rails 迁移帮助器现在支持复合主键。以下是使用它们的一些示例:

# Assuming "carts" table has "(shop_id, id)" as a primary key.
add_foreign_key(:orders, :carts, primary_key: [:shop_id, :id])
# or
add_foreign_key(:orders, :carts, column: [:cart_shop_id, :cart_id])

remove_foreign_key(:orders, :carts, primary_key: [:shop_id, :id])
foreign_key_exists?(:orders, :carts, primary_key: [:shop_id, :id])

向测试指南中添加“测试视图部分”部分
指南中添加了“测试视图部分”部分,这部分扩展了可用于继承自 ActionView::TestCase 的测试的各种工具。

添加对在添加检查约束时if_not_exists的支持。
方法 add_check_constraint 现可接受 if_not_exists 选项。如果设置为 true,那么在检查约束已存在的情况下不会引发错误。此外,在反转 remove_check_constraintadd_check_constraint 时,如果设置 if_existsif_not_exists 选项,则会将这些选项进行转换。这有助于轻松创建幂等的、非事务性迁移。

加密:在每个属性级别支持 support_unencrypted_data
如果启用了 ActiveRecord::Encryption.config.support_unencrypted_data,则此更改允许你在需要时替代属性的该全局设置。

在生成名称危险的属性时引发错误
生成具有名为 hashsave 的属性的模型应引发错误,而不是生成具有无效属性的迁移,对此拉取请求进行了处理。

你可以在 此处 查看完整的更改列表上周有 28 位贡献者 为 Rails 代码库做出了贡献!

到下次再见!