您好!我是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:primary、rails db:down:primary)会转储所有数据库的架构文件,即使这不是必需的。此更改修复了此问题,现在只为特定数据库执行转储。
例如,在转换"3,50"时,其行为符合预期,而不会引发错误。
此更改为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-ujs的start方法被调用了两次,导致无法正确自动启动。
您可以在此处查看所有更改的完整列表。
上周,Rails代码库共有34位贡献者!
下次再见!
订阅以通过邮件获取这些更新。