大家好,我是 格雷格,将向您介绍 Rails 的最新更新。该框架在上周迎来了 20 岁生日。祝 Ruby on Rails 生日快乐!我们来了解一下本周 Rails 代码库的更新。
2024 年 Rails 名人奖提名开放
去年,Rails 基金会启动了 Rails 名人奖,授予那些为 Rails 生态系统和社区做出杰出贡献的人。这些贡献包括出色的代码、文档、热情或协助,从而帮助他人完成更多工作、了解更多知识或获得灵感。您可以在 此处 提交 2024 年 Rails 名人奖提名。
实施新的维护政策
上周更新了 Rails 维护政策。主要更新如下:
向身份验证生成器添加密码重置
此请求向 Rails 新生成器添加了基本密码重置流程,以展示带有邮件发送程序的签名 ID 的使用。
此外,生成器上周 更名为“身份验证”。
向 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 引导命令
新 bin/rails boot
命令将引导应用程序并退出。支持标准 -e/--environment
选项。当您想测试 Rails 应用的引导逻辑或对某项内容进行基准测试时,会非常方便。
将 _check_box_ 帮助程序重命名为 _checkbox_
此请求将 check_box
帮助程序方法重命名为 checkbox
,并将旧名称保留为别名。
在 另一个请求 中,对 text_area
进行了同样的更改。
使用警告运行 Docker 构建时生成错误
Docker 引入了 Docker 构建检查,默认情况下,使用警告运行 Docker 构建不会导致构建失败(返回非零退出代码)。要在警告时引发错误,应向 Dockerfile 添加 # check=error=true
声明,而此请求正是这样做的。
更改有源模型的 _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 作为要过滤掉的默认参数
通常,您不应向服务器发布信用卡详细信息,但如果您在表单中出错并且确实发布了用户的信用卡号,则这些详细信息将默认记录下来,即使您的服务器不使用它们也不例外。此项请求将 cvv
和 cvc
添加到 ActiveSupport::ParameterFilter
的新应用程序的默认值。这意味着带有这些名称的参数默认情况下不会被记录。这只是更改了新应用程序的模板;对现有应用程序没有进行任何更改。
支持使用自定义列进行 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 代码库的工作!
下期再见!
订阅 即可收到邮件更新。