你好,我是Greg,为你带来 Rails 的最新变动。框架在上周迎来了 20 周年生日。Ruby on Rails 生日快乐!让我们一起看看本周 Rails 代码库中的变动。
2024 年 Rails Luminary 奖开始接受提名
去年,Rails 基金会启动了 Rails Luminary 奖项,表彰那些通过卓越的代码、文档、热情或协助为 Rails 生态系统和社区做出贡献的人,从而帮助他人做得更多、学得更多或受到启发。你可以在此处提交你的 2024 年 Rails Luminary 提名。
实施新的维护策略
Rails 维护策略在上周进行了更新。主要变动如下:
在身份验证生成器中添加密码重置功能
此拉取请求为新的 Rails 生成器添加了基本的密码重置流程,展示了如何使用带邮件器的已签名 ID。
此外,在上周,该生成器已重命名为“authentication”。
为 has_secure_password 添加默认密码重置令牌
此拉取请求在使用 has_secure_password 时,添加了 15 分钟密码重置令牌的默认配置。
class User < ApplicationRecord
has_secure_password
end
user = User.create!(name: "david", password: "123", password_confirmation: "123")
token = user.password_reset_token
User.find_by_password_reset_token(token) # returns user in the next 15 minutes.
实现 bin/rails boot 命令
新的 bin/rails boot 命令会启动应用程序并退出。支持标准的 -e/--environment 选项。当你想要测试 Rails 应用的启动逻辑或进行性能基准测试时,它会非常有用。
将 check_box 助手重命名为 checkbox
此拉取请求将 check_box 助手方法重命名为 checkbox,并保留了旧名称作为别名。
在另一个拉取请求中,对 text_area 进行了相同的更改。
运行带有警告的 Docker 构建时生成错误
Docker 引入了 Docker 构建检查,默认情况下,运行带有警告的 Docker 构建不会导致构建失败(返回非零退出码)。要对警告引发错误,需要在 Dockerfile 中添加 # check=error=true 声明,此拉取请求已完成此操作。
更改 Active Model 的 human_attribute_name 以引发错误
当 config.i18n.raise_on_missing_translations 设置为 true 时,控制器和视图在缺少翻译时会引发错误。但是,模型不会。此拉取请求更改了模型,使其在 raise_on_missing_translations 为 true 时引发错误。
弃用哈希键路径映射
此拉取请求弃用了使用哈希键路径绘制路由,以提高路由速度。
# Before
get "/users" => "users#index"
post "/logout" => :sessions
mount MyApp => "/my_app"
# After
get "/users", to: "users#index"
post "/logout", to: "sessions#logout"
mount MyApp, at: "/my_app"
弃用多个路径路由映射
为了提高路由速度,也弃用了使用多个路径绘制路由。你可以使用 with_options 或循环来简化多个路径的绘制。
# Before
get "/users", "/other_path", to: "users#index"
# After
get "/users", to: "users#index"
get "/other_path", to: "users#index"
引入 ActiveModel::AttributeAssignment#attribute_writer_missing
此拉取请求引入了 ActiveModel::AttributeAssignment#attribute_writer_missing,为实例提供了一个机会来优雅地处理分配给未知属性的情况。
class Rectangle
include ActiveModel::AttributeAssignment
attr_accessor :length, :width
def attribute_writer_missing(name, value)
Rails.logger.warn "Tried to assign to unknown attribute #{name}"
end
end
rectangle = Rectangle.new
rectangle.assign_attributes(height: 10) # => Logs "Tried to assign to unknown attribute 'height'"
在新应用程序中,将 cvv 和 cvc 添加为默认要过滤掉的参数
通常你不应该将信用卡信息发送到你的服务器,但如果你在表单中出错并发送了用户的信用卡号,这些信息默认会被记录下来,即使你的服务器不使用它们。此拉取请求为新应用程序的 ActiveSupport::ParameterFilter 添加了 cvv 和 cvc 的默认值。这意味着具有这些名称的参数默认不会被记录。这仅更改了新应用程序的模板;现有应用程序没有任何更改。
支持使用自定义列的 Active Record 批处理
此拉取请求增加了对 Active Record 批处理的支持,以便与自定义列一起使用。
Product.in_batches(cursor: [:shop_id, :id]) do |relation|
# do something with relation
end
允许在本地环境中将 secret_key_base 重新设置为 nil
以前,在本地环境(或使用 SECRET_KEY_BASE_DUMMY)中允许将 secret_key_base 设置为 nil,因为验证仅在使用时发生,而不是在设置器上。这最近被更改,以便更容易地精确识别 secret_key_base 何时被设置为无效值。
然而,这一更改破坏了一些在 dev/test 中无条件将 secret_key_base 设置为某个外部值的应用程序。在此更改之前,设置的值可以是 nil,并在使用时回退到生成的本地密钥。此拉取请求恢复了该行为。
确保 SQLite 事务默认为 IMMEDIATE 模式
此拉取请求将 Active Record 更改为在可能的情况下使用 SQLite IMMEDIATE 事务。通过此更改,针对 SQLite3 适配器的事务默认以 IMMEDIATE 模式运行,以提高并发支持并避免忙碌异常。
你可以在此处查看所有变动的完整列表。 上周,有31 位贡献者为 Rails 代码库做出了贡献!
下次再见!
订阅以通过邮件获取这些更新。