2023年10月27日,星期五

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

由 vipulnsward 发布

您好!我是Vipul,为您带来本周Rails代码库变更的最新消息。 Vipul

减少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方法中忽略无效的主键值

当一些无效的主键值传递给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在捆绑环境中的auto start()

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

您可以在此处查看所有更改的完整列表。
上周,Rails代码库共有34位贡献者

下次再见!

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