来自 Vipul. 的问候。
这真是忙碌的一周,主分支上有很多变化。
我们进行了大量的性能改进、错误修复、新增功能和增强。
我还以为大家都在玩 Pokemon Go 呢。
没错,Kasper 获得了自己的卡通头像!
Kasper 帮助进行了无数次修改,并帮助其他人也进行了修改。
他持续做出重要的个人贡献,例如新的局部集合缓存方案、通配符模板依赖项,以及测试运行器的大幅改进。
本周有 30 位杰出人士贡献了代码。其中有 2 位是首次将提交合并到 Rails。
非常感谢大家!❤️ 如果您希望下周也能看到自己的名字出现在这里,不妨看看当前问题列表?改进文档也是一个很好的起点!
String#blank? 现在使用 Regex#match?,并遵循了引入的 Regex#match? 的向后兼容添加。
这有助于在 Ruby 2.4 的新 Regex 改进下,性能提升高达 2 倍!
ActiveSupport::TestCase 得到了增强,以更通用的方式补充 assert_difference。
有了这个便捷的比较,我们现在可以这样做:
user = User.start_registration
assert_changes ‘user.token’, from: nil, to: /\w{32}/ do
user.finish_registration
end
来封装操作之前和之后的状态变化。
视图缓存中重新添加了对自定义可调用缓存键的支持。这使我们能够这样做:
<%= render partial: ‘projects/project’, collection: @projects, cached: -> project { [project, current_user] } %>
并传递一个基于可调用块的键,这使我们能够基于调用结果来缓存和缓存过期。在上面的例子中,缓存将随着 project 和 current_user 对象的更改而过期。
此更改向 CollectionProxy 添加了 exists? 和 update_all,以遵守关联作用域。
这在新版本的 Rails 中调用 update_all 或 exists? 时会导致问题,例如当对一个集合对象(如 user.references.update_all(…))调用时。
在此更改之前,多参数属性转换带有无效参数会导致问题,当 AR 的 time_zone_aware_attributes 被启用时,因为这会导致无效的转换。
现在,新更改仅在有有效值可供安全转换时才尝试转换。
之前,将 merge 作为第一个方法来构建作用域会导致错误-
scope :unsafe_chaining, -> { merge(Comment.newest) } #=> NoMethodError
此更改现在允许我们克服这一点,并构建像以下这样的作用域-
scope :_chaining, ->{merge(Comment.newest).joins(:comments) } # => OK_
此更改允许 MessageEncryptor 现在支持经过身份验证的加密模式。
AEAD 模式(如 aes-256-gcm)提供机密性和数据真实性,无需使用 MessageVerifier 来检查加密数据是否被篡改。这加快了加密/解密速度,并产生了更短的密文。
此更改删除了 config/initializers/session_store.rb 来通过 initializer 定义会话存储,并在内部设置默认会话存储。
默认情况下,会话存储将设置为 cookie 存储,并以应用程序名称作为会话键。
本周 Rails 动态就到这里!还有许多其他伟大的贡献,在此无法一一列举,但欢迎您查看它们!
下周再见!