更多内容请访问 rubyonrails.org:

1 升级到 Rails 6.1

如果您要升级现有应用程序,在进行升级之前拥有良好的测试覆盖率是一个好主意。您还应该先升级到 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 移除

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,以便在数据库fixture中生成<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成为稳定而强大的框架的许多人。感谢他们所有人的贡献。



返回顶部