2023 年 10 月 27 日 星期五

减少 ActiveSupport::Callbacks、枚举的非列支持属性等使用的内存!

发布者 vipulnsward

嗨!我是 Vipul,将本周 Rails 代码库变更的最新信息提供给您。

减少 ActiveSupport::Callbacks 使用的内存

以前,与子类共享的回调不会在它们之间共享在 before/after 过滤器中生成的 proc。这也是惰性生成的,因此会在引导应用程序后导致内存增长。

此更改添加了在 before/after 块中复用这些内容,从引导到请求后提供服务时的内存增长减半

支持枚举的非列支持属性

该内容重新添加了对使用具有非列支持属性的枚举的支持,同时仍可防止枚举属性名称中出现拼写错误。当使用具有非列支持属性的枚举时,该属性必须先使用显式类型进行声明。

例如

class Post < ActiveRecord::Base 
  attribute :topic, :string 
  enum topic: %i[science tech engineering math]
end

在 NumberToHumanSizeConverter 中处理负数

此拉取请求添加了对 number_to_human_size 的支持以处理负数。

# Before
helper.number_to_human_size(-1234567)
# => "-1234567 Bytes"

# After
helper.number_to_human_size(-1234567)
# => "-1.18 MB"

仅针对特定数据库转储架构,以针对多个数据库执行回滚/上升/下降任务

在此更改之前,rails db:migrate:primary(和 rails db:up:primaryrails db:down:primary)针对所有数据库转储架构文件,即使这不是必需的。此更改修复了此内容,以仅对特定数据库执行转储。

修复带有逗号作为基数点的 PG 资金转换

例如,当转换 "3,50" 时,按预期工作,而不是引发错误。

添加 BroadcastLogger#deep_dup

此更改为 BroadcastLogger 类添加了对 dup 的正确支持,以前只调用 dup 不够用。

修复 StrongParameters#extract_value 以包含空白值

此更改修复了 extract_value,以使其也能工作并保留空白值。

params = ActionController::Parameters.new(tags: "ruby,rails,,web")
params.extract_value(:tags) # => ["ruby", "rails", "", "web"]

这有助于修复一个错误,其中使用 url_helpers 会生成无效的 URL(如果记录的第二个复合主键为空)。

在 ActiveRecord::Persistence.delete 方法中忽略无效的 PRIMARY KEY 值

当将一些无效的主键值传递给 ActiveRecord::Persistence.delete 方法时,Active Record 仍然会执行 DELETE 查询,即使不需要它。例如,

irb(main):001> User.delete([])
  User Delete All (0.6ms)  DELETE FROM "users" WHERE 1=0
=> 0

此更改现在会跳过不必要地运行该查询。

修复绑定环境中的 rails-ujs 自动 start()

此变更修复了在捆绑环境中使用 rails-ujs 的问题(使用 esbuild 等),其中 rails-ujs 无法正确自动启动,因为其 start 方法被调用了两次。

您可以在 此处 查看所有更改列表。
过去一周,有 34 位贡献者 为 Rails 代码库做出了贡献!

敬请期待下次更新!

订阅 以接收邮件形式的这些更新。