大家好,我是 Emmanuel Hayford(Emmanuel Hayford),带来 Rails 代码库的最新消息。让我们开始吧!
哦!如果您错过了,#RailsWorld 2025 的所有演讲现在都可以在线观看。
修复了挂载在根目录上的引擎的 SCRIPT_NAME 处理问题。
当一个引擎挂载在 / 上且正在使用 SCRIPT_NAME 时,URL 助手会错误地从生成的 URL 中丢弃脚本名称。该问题追溯到 RoutesProxy#merge_script_names,它未能处理脚本名称仅为 / 的边缘情况。该修复会修剪 new_script_name 末尾的斜杠,从而恢复在路径前缀下部署的应用程序的正确 URL 生成。
泛化 :rich_text_area Capybara 选择器
现在,:rich_text_area Capybara 选择器不再依赖于 <trix-editor> 元素,而是查找 role="textbox" 和 contenteditable 属性。此更改使得支持其他支持 Action Text 的 WYSIWYG 编辑器更加容易。fill_in_rich_textarea 测试助手也已更新,在回退到 editor.loadHTML() 之前,它会使用 <trix-editor> 上的 .value 属性(自 trix v2.1.7 起可用)。
在 /rails/info/routes 中显示引擎路由
现在,引擎路由将与应用程序路由一起显示在 /rails/info/routes 中。以前,只显示主应用程序路由,因为 _routes.routes 删除了引擎路由。此更改使用 Rails.application.routes.routes,确保挂载的引擎也出现在路由输出中。
恢复 Active Storage 配置以禁用变体和分析器
Active Storage 现在允许您完全配置要使用的分析器和变体处理器。您可以完全清除分析器或提供自己的分析器。
# ActiveStorage.analyzers can be set to an empty array:
config.active_storage.analyzers = []
# => ActiveStorage.analyzers = []
# or use custom analyzer:
config.active_storage.analyzers = [ CustomAnalyzer ]
# => ActiveStorage.analyzers = [ CustomAnalyzer ]
如果未提供配置,它将使用默认分析器。
您还可以禁用变体处理器以在启动时移除有关缺少 gem 的警告。
config.active_storage.variant_processor = :disabled
修复时区转换中的时间属性脏跟踪问题
由于时区转换会改变隐藏的日期部分,因此仅时间属性在分配相同时间时可能会被错误地标记为已更改。该修复程序在转换过程中将时间值标准化为固定日期(2000-01-01),从而防止了错误的脏跟踪,同时保持日期时间属性不变。
之前(错误)
# Configuration
Time.zone = "Tokyo"
ActiveRecord.default_timezone = :utc
user = User.create!(created_at: "14:30")
user.reload
user.created_at = "14:30"
user.changed_attribute_names_to_save
# => ["created_at"] # Incorrectly marked as changed!
之后(已修复)
# Configuration
config.active_record.use_fixed_date_for_time_attributes = true
user = User.create!(created_at: "14:30")
user.reload
user.created_at = "14:30"
user.changed_attribute_names_to_save
# => [] # Correctly not marked as changed
RateLimiting:支持 :by 和 :with 的方法名
在此提交之前,:by 和 :with 选项仅支持可调用对象。此提交旨在使速率限制更接近回调声明,例如 before_action 和 after_action,通过支持实例方法名。
如果此更改无效,多行自定义可调用对象会使声明难以阅读。同样,共享自定义需要使用局部变量来重用。例如:
rate_limiting_bucket = -> { ... }
rate_limit to: 3, within: 1.minutes, by: rate_limiting_bucket
rate_limit to: 10, within: 5.minutes, by: rate_limiting_bucket
rate_limit to: 30, within: 10.minutes,
by: -> {
# ...
# multiple lines
# ...
},
with: -> {
# ...
# multiple lines
# ...
}
您可以在此处查看所有更改的列表。 过去一周,我们有22 位贡献者为 Rails 代码库做出了贡献!
下次再见!
订阅以通过邮件获取这些更新。