edge
更多信息请访问 rubyonrails.org: 更多 Ruby on Rails

Ruby on Rails 6.1 发布说明

Rails 6.1 的亮点:

这些发布说明仅涵盖了主要更改。要了解各种错误修复和更改,请参阅更改日志或查看 GitHub 上主要 Rails 存储库中的提交列表

1 升级到 Rails 6.1

如果您正在升级现有应用程序,在进行升级之前,最好有良好的测试覆盖率。如果您还没有升级到 Rails 6.0,请先升级到 Rails 6.0,并确保您的应用程序在升级到 Rails 6.1 之前仍然按预期运行。在升级时要注意的事项列表可在升级 Ruby on Rails指南中找到。

2 主要功能

2.1 每个数据库连接的切换

Rails 6.1 提供了每个数据库连接的切换功能。在 6.0 中,如果您切换到“读取”角色,则所有数据库连接也会切换到读取角色。现在在 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 异步销毁关联

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

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::Base#initialize 的第一个参数中传递非 ActionView::LookupContext 对象的已弃用支持。

  • 删除了 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

详细更改请参阅Changelog

7.1 移除

  • 移除已弃用的ActionMailer::Base.receive,改用Action Mailbox

7.2 弃用

7.3 重要更改

8 Active Record

详细更改请参阅Changelog

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

详细更改请参阅Changelog

9.1 移除

  • 移除向ActiveStorage::Transformers::ImageProcessing传递:combine_options操作的已弃用支持。

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

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

  • 移除已弃用的ActiveStorage::Downloading

9.2 弃用

  • 弃用Blob.create_after_upload,改用Blob.create_and_upload。 (Pull Request)

9.3 重要更改

  • 添加Blob.create_and_upload方法,用于创建新的blob并将给定的io上传到服务。 (Pull Request)
  • 添加ActiveStorage::Blob#service_name列。升级后需要运行迁移。运行bin/rails app:update生成该迁移。

10 Active Model

详细更改请参阅Changelog

10.1 移除

10.2 弃用

10.3 重要更改

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

11 Active Support

详细更改请参阅Changelog

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

详细更改请参阅Changelog

12.1 移除

12.2 弃用

  • 弃用config.active_job.return_false_on_aborted_enqueue

12.3 重要更改

  • 当取消排队作业时返回false

13 Action Text

详细更改请参阅Changelog

13.1 移除

13.2 弃用

13.3 重要更改

  • 添加方法,通过在富文本属性名称后添加?来确认富文本内容是否存在。 (Pull Request)

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

  • 添加 ActionText::FixtureSet.attachment 以在数据库测试数据中生成 <action-text-attachment> 元素。(Pull Request)

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付出了大量时间的人们。向他们致以崇高的敬意。

反馈

欢迎您帮助改进本指南的质量。

如果您发现任何拼写错误或事实错误,请贡献您的意见。 要开始,请阅读我们的 文档贡献 部分。

您还可能会发现不完整的内容或过时的内容。 请为主要内容添加任何缺失的文档。请先检查 Edge 指南,以验证问题是否已经修复或尚未修复。 请参阅 Ruby on Rails 指南准则 以了解样式和规范。

如果您发现需要修复但无法自行修复的问题,请 提交问题

最后但同样重要的是,欢迎您在 官方 Ruby on Rails 论坛 上讨论有关 Ruby on Rails 文档的任何问题。