更多内容请访问 rubyonrails.org:

1. 升级到 Rails 6.1

如果您正在升级现有应用程序,最好在开始之前做好充分的测试覆盖。如果您尚未升级到 Rails 6.0,则应首先升级到 Rails 6.0,并确保您的应用程序在尝试更新到 Rails 6.1 之前仍按预期运行。在升级 Ruby on Rails 指南中列出了升级时需要注意的事项。

2. 主要特性

2.1. 每个数据库连接切换

Rails 6.1 提供了按数据库切换连接的功能。在 6.0 中,如果您切换到 reading 角色,那么所有数据库连接也会切换到 reading 角色。现在在 6.1 中,如果您在配置中将 legacy_connection_handling 设置为 false,Rails 将允许您通过在相应的抽象类上调用 connected_to 来切换单个数据库的连接。

2.2. 水平分片

Rails 6.0 提供了功能分区(多个分区,不同模式)数据库的功能,但无法支持水平分片(相同模式,多个分区)。Rails 无法支持水平分片,因为 Active Record 中的模型每个类每个角色只能有一个连接。现在这个问题已经修复,并且水平分片与 Rails 一起可用。

2.3. 严格加载关联

严格加载关联允许您确保所有关联都急切加载,并在 N+1 问题发生之前阻止它们。

2.4. 委托类型

委托类型是单表继承的替代方案。这有助于表示类层次结构,允许超类是一个由自己的表表示的具体类。每个子类都有自己的表用于额外的属性。

2.5. 异步销毁关联

异步销毁关联增加了应用程序在后台作业中 destroy 关联的功能。这有助于您在销毁数据时避免应用程序中的超时和其他性能问题。

3. Railties

有关详细更改,请参阅变更日志

3.1. 移除

  • 删除已弃用的 rake notes 任务。

  • 删除 rails dbconsole 命令中已弃用的 connection 选项。

  • rails notes 中删除对已弃用的 SOURCE_ANNOTATION_DIRECTORIES 环境变量的支持。

  • 删除 rails server 命令中已弃用的 server 参数。

  • 删除已弃用的通过使用 HOST 环境变量指定服务器 IP 的支持。

  • 删除已弃用的 rake dev:cache 任务。

  • 删除已弃用的 rake routes 任务。

  • 删除已弃用的 rake initializers 任务。

3.2. 弃用

3.3. 显著变更

4. Action Cable

有关详细更改,请参阅变更日志

4.1. 移除

4.2. 弃用

4.3. 显著变更

5. Action Pack

有关详细更改,请参阅变更日志

5.1. 移除

  • 删除已弃用的 ActionDispatch::Http::ParameterFilter

  • 删除控制器级别已弃用的 force_ssl

5.2. 弃用

  • 弃用 config.action_dispatch.return_only_media_type_on_content_type

5.3. 显著变更

  • ActionDispatch::Response#content_type 更改为返回完整的 Content-Type 标头。

6. Action View

有关详细更改,请参阅变更日志

6.1. 移除

  • ActionView::Template::Handlers::ERB 中删除已弃用的 escape_whitelist

  • ActionView::Resolver 中删除已弃用的 find_all_anywhere

  • ActionView::Template::HTML 中删除已弃用的 formats

  • ActionView::Template::RawFile 中删除已弃用的 formats

  • ActionView::Template::Text 中删除已弃用的 formats

  • ActionView::PathSet 中删除已弃用的 find_file

  • ActionView::LookupContext 中删除已弃用的 rendered_format

  • ActionView::ViewPaths 中删除已弃用的 find_file

  • 删除对将不是 ActionView::LookupContext 的对象作为 ActionView::Base#initialize 的第一个参数传递的支持。

  • 删除 ActionView::Base#initialize 中已弃用的 format 参数。

  • 删除已弃用的 ActionView::Template#refresh

  • 删除已弃用的 ActionView::Template#original_encoding

  • 删除已弃用的 ActionView::Template#variants

  • 删除已弃用的 ActionView::Template#formats

  • 删除已弃用的 ActionView::Template#virtual_path=

  • 删除已弃用的 ActionView::Template#updated_at

  • 删除 ActionView::Template#initialize 中必需的已弃用 updated_at 参数。

  • 删除已弃用的 ActionView::Template.finalize_compiled_template_methods

  • 删除已弃用的 config.action_view.finalize_compiled_template_methods

  • 删除对使用块调用 ActionView::ViewPaths#with_fallback 的已弃用支持。

  • 删除对将绝对路径传递给 render template: 的已弃用支持。

  • 删除对将相对路径传递给 render file: 的已弃用支持。

  • 删除对不接受两个参数的模板处理程序的旧支持。

  • 删除 ActionView::Template::PathResolver 中已弃用的模式参数。

  • 删除对在某些视图助手中从对象调用私有方法的已弃用支持。

6.2. 弃用

6.3. 显著变更

  • 要求 ActionView::Base 子类实现 #compiled_method_container

  • 使 ActionView::Template#initialize 中的 locals 参数成为必需项。

  • javascript_include_tagstylesheet_link_tag 资源助手会生成一个 link 头部,它为现代浏览器提供有关预加载资源的提示。这可以通过将 config.action_view.preload_links_header 设置为 false 来禁用。

7. Action Mailer

有关详细更改,请参阅变更日志

7.1. 移除

  • 删除已弃用的 ActionMailer::Base.receive,转而使用 Action Mailbox

7.2. 弃用

7.3. 显著变更

8. Active Record

有关详细更改,请参阅变更日志

8.1. 移除

  • ActiveRecord::ConnectionAdapters::DatabaseLimits 中删除已弃用的方法。

    column_name_length table_name_length columns_per_table indexes_per_table columns_per_multicolumn_index sql_query_length joins_per_query

  • 删除已弃用的 ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_multi_insert?

  • 删除已弃用的 ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_foreign_keys_in_create?

  • 删除已弃用的 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#supports_ranges?

  • 删除已弃用的 ActiveRecord::Base#update_attributesActiveRecord::Base#update_attributes!

  • 删除 ActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_version 中已弃用的 migrations_path 参数。

  • 删除已弃用的 config.active_record.sqlite3.represent_boolean_as_integer

  • ActiveRecord::DatabaseConfigurations 中删除已弃用的方法。

    fetch each first values []=

  • 删除已弃用的 ActiveRecord::Result#to_hash 方法。

  • 删除对在 ActiveRecord::Relation 方法中使用不安全原始 SQL 的已弃用支持。

8.2. 弃用

  • 弃用 ActiveRecord::Base.allow_unsafe_raw_sql

  • 弃用 connected_to 上的 database 关键字参数。

  • legacy_connection_handling 设置为 false 时,弃用 connection_handlers

8.3. 显著变更

  • MySQL:唯一性验证器现在尊重默认数据库排序规则,不再默认强制区分大小写比较。

  • relation.create 不再在初始化块和回调中将作用域泄漏到类级别查询方法。

    之前

    User.where(name: "John").create do |john|
      User.find_by(name: "David") # => nil
    end
    

    之后

    User.where(name: "John").create do |john|
      User.find_by(name: "David") # => #<User name: "David", ...>
    end
    
  • 命名作用域链不再将作用域泄漏到类级别查询方法。

    class User < ActiveRecord::Base
      scope :david, -> { User.where(name: "David") }
    end
    

    之前

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'John' AND name = 'David'
    

    之后

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'David'
    
  • where.not 现在生成 NAND 谓词而不是 NOR。

    之前

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
    

    之后

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE NOT (name = 'Jon' AND role = 'admin')
    
  • 要使用新的每个数据库连接处理应用程序,必须将 legacy_connection_handling 更改为 false,并删除 connection_handlers 上已弃用的访问器。connects_toconnected_to 的公共方法无需更改。

9. Active Storage

有关详细更改,请参阅变更日志

9.1. 移除

  • 删除对将 :combine_options 操作传递给 ActiveStorage::Transformers::ImageProcessing 的已弃用支持。

  • 删除已弃用的 ActiveStorage::Transformers::MiniMagickTransformer

  • 删除已弃用的 config.active_storage.queue

  • 删除已弃用的 ActiveStorage::Downloading

9.2. 弃用

  • 弃用 Blob.create_after_upload,转而使用 Blob.create_and_upload。(拉取请求)

9.3. 显著变更

  • 添加 Blob.create_and_upload 以创建新 blob 并将给定 io 上传到服务。(拉取请求)
  • 添加了 ActiveStorage::Blob#service_name 列。升级后需要运行迁移。运行 bin/rails app:update 以生成该迁移。

10. Active Model

有关详细更改,请参阅变更日志

10.1. 移除

10.2. 弃用

10.3. 显著变更

  • Active Model 的错误现在是具有接口的对象,允许您的应用程序更轻松地处理和与模型抛出的错误进行交互。此功能包括查询接口、更精确的测试以及访问错误详细信息。

11. Active Support

有关详细更改,请参阅变更日志

11.1. 移除

  • config.i18n.fallbacks 为空时,删除已弃用的回退到 I18n.default_locale

  • 删除已弃用的 LoggerSilence 常量。

  • 删除已弃用的 ActiveSupport::LoggerThreadSafeLevel#after_initialize

  • 删除已弃用的 Module#parent_nameModule#parentModule#parents

  • 删除已弃用的文件 active_support/core_ext/module/reachable

  • 删除已弃用的文件 active_support/core_ext/numeric/inquiry

  • 删除已弃用的文件 active_support/core_ext/array/prepend_and_append

  • 删除已弃用的文件 active_support/core_ext/hash/compact

  • 删除已弃用的文件 active_support/core_ext/hash/transform_values

  • 删除已弃用的文件 active_support/core_ext/range/include_range

  • 删除已弃用的 ActiveSupport::Multibyte::Chars#consumes?ActiveSupport::Multibyte::Chars#normalize

  • 删除已弃用的 ActiveSupport::Multibyte::Unicode.pack_graphemesActiveSupport::Multibyte::Unicode.unpack_graphemesActiveSupport::Multibyte::Unicode.normalizeActiveSupport::Multibyte::Unicode.downcaseActiveSupport::Multibyte::Unicode.upcaseActiveSupport::Multibyte::Unicode.swapcase

  • 删除已弃用的 ActiveSupport::Notifications::Instrumenter#end=

11.2. 弃用

  • 弃用 ActiveSupport::Multibyte::Unicode.default_normalization_form

11.3. 显著变更

12. Active Job

有关详细更改,请参阅变更日志

12.1. 移除

12.2. 弃用

  • 弃用 config.active_job.return_false_on_aborted_enqueue

12.3. 显著变更

  • 当作业入队被中止时返回 false

13. Action Text

有关详细更改,请参阅变更日志

13.1. 移除

13.2. 弃用

13.3. 显著变更

  • 通过在富文本属性名称后添加 ? 来添加确认富文本内容是否存在的方法。(拉取请求)

  • 添加 fill_in_rich_text_area 系统测试用例助手,用于查找 trix 编辑器并用给定的 HTML 内容填充它。(拉取请求)

  • 添加 ActionText::FixtureSet.attachment 以在数据库 fixtures 中生成 <action-text-attachment> 元素。(拉取请求)

14. Action Mailbox

有关详细更改,请参阅变更日志

14.1. 移除

14.2. 弃用

  • 弃用 Rails.application.credentials.action_mailbox.api_keyMAILGUN_INGRESS_API_KEY,转而使用 Rails.application.credentials.action_mailbox.signing_keyMAILGUN_INGRESS_SIGNING_KEY

14.3. 显著变更

15. Ruby on Rails 指南

有关详细更改,请参阅变更日志

15.1. 显著变更

16. 致谢

请参阅Rails 贡献者完整列表,感谢许多人花费大量时间使 Rails 成为一个稳定而健壮的框架。向他们所有人致敬。



回到顶部