2024 年 6 月 21 日,星期五

新数据库分片方法、改进 Active Record 迁移文档、ActiveStorage 的缓存改进等等!

由 vipulnsward 发布

嗨,各位,祝大家星期五愉快!Vipul 在这里为您带来本周 Rails 更新。让我们深入了解吧。

改进了 Active Record 迁移文档
Rails Foundation 文档团队继续改进指南的不同部分。此 Pull Request 更新了 Active Record 迁移文档,以接收各种新增内容、改进内容等。

将 .shard_keys、.sharded? 和 .connected_to_all_shards 方法添加到 ActiveRecord::Base
此更改添加了 .shard_keys.sharded?.connected_to_all_shards 方法,以开始返回模型的分片信息。

class ShardedBase < ActiveRecord::Base
  self.abstract_class = true

  connects_to shards: {
    shard_one: { writing: :shard_one },
    shard_two: { writing: :shard_two }
  }
end

class ShardedModel < ShardedBase
end

ShardedModel.shard_keys => [:shard_one, :shard_two]
ShardedModel.sharded? => true
ShardedBase.connected_to_all_shards { ShardedModel.current_shard } => [:shard_one, :shard_two]    

在 Active Storage 中通过代理下载失败时使缓存过期
Active Storage 中的代理控制器在流传输之前提前设置缓存头。在某些情况下,在我们向客户端发送第一个字节之前,文件下载可能会失败。在这些情况下,此更改将使缓存失效,并在关闭流之前返回更好的响应状态。

延迟生成断言失败消息
Minitest 支持将失败消息作为可调用项传递,这允许我们推迟生成失败消息。其中一些失败消息可能比较难生成,尤其是在检查非常大的对象或访问过程的 AST 时。此更改现在可以通过将其传递给可调用项来延迟生成失败消息。

使没有字段的“rails g scaffold”生成符合 RuboCop 的代码
当没有字段,而我们使用 rails g scaffold 时,生成的代码不符合 RuboCop。

此更改通过以下操作使其符合规定:

  • 在迁移中的“t.timestamps”之前省略一个空行。
  • 在创建和更新控制器以及 API 功能测试中省略空散列的前后空格。

修复 alias_attribute 忽略在父类中定义的方法
在定义常规属性时,不会覆盖继承的方法。然而,在定义别名属性时,不会考虑继承的方法。此更改修复了 alias_attribute 以正确忽略在父类中定义的方法。

您可以在此处查看完整更改列表。
上周有 26 位贡献者参与了 Rails 代码库的开发!

下次见!

订阅,以便通过邮件收到这些更新。