2024年6月21日,星期五

新的数据库分片方法、改进的 Active Record Migration 文档、ActiveStorage 的缓存改进以及更多!

由 vipulnsward 发布

大家好,周五快乐!我是Vipul,带来本周Rails的最新更新。我们开始吧。

改进Active Record迁移文档
Rails Foundation文档团队将继续改进Guides的各个领域。此拉取请求更新了Active Record迁移文档,以进行各种添加、改进等。

向ActiveRecord::Base添加.shard_keys、.sharded?和.connected_to_all_shards方法
此更改添加了.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中的Proxy控制器在流式传输之前就设置了缓存头。在某些情况下,在将第一个字节发送给客户端之前,文件下载可能会失败。在这些情况下,此更改将使缓存失效,并在关闭流之前返回更好的响应状态。

延迟生成断言失败消息
Minitest支持将失败消息作为可调用对象传递,这使我们能够延迟生成失败消息。其中一些失败消息可能生成成本较高,尤其是在检查非常大的对象或访问proc的AST时。此更改通过传递可调用对象来延迟生成失败消息。

使“rails g scaffold”在没有字段的情况下生成符合RuboCop的代码
当没有字段时,我们使用rails g scaffold,生成的代码不符合RuboCop规范。

此更改使其符合规范,方法是:

  • 在“t.timestamps”之前的迁移中省略空白行。
  • 在创建和更新控制器及api功能测试中的空哈希中省略前导和尾随空格。

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

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

下次再见!

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