更多内容请访问 rubyonrails.org:

1. 升级到 Rails 7.0

如果您正在升级一个现有应用程序,最好在开始之前做好充分的测试覆盖。如果您还没有升级到 Rails 6.1,应该先升级到 Rails 6.1,并确保您的应用程序在尝试升级到 Rails 7.0 之前仍能按预期运行。升级时需要注意的事项列表可在升级 Ruby on Rails 指南中找到。

2. 主要特性

3. Railties

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

3.1. 移除

  • 移除 dbconsole 中已弃用的 config

3.2. 弃用

3.3. 显著变更

  • Sprockets 现在是可选依赖项

    gem rails 不再依赖 sprockets-rails。如果您的应用程序仍需要使用 Sprockets,请确保将 sprockets-rails 添加到您的 Gemfile 中。

    gem "sprockets-rails"
    

4. Action Cable

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

4.1. 移除

4.2. 弃用

4.3. 显著变更

5. Action Pack

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

5.1. 移除

  • 移除已弃用的 ActionDispatch::Response.return_only_media_type_on_content_type

  • 移除已弃用的 Rails.config.action_dispatch.hosts_response_app

  • 移除已弃用的 ActionDispatch::SystemTestCase#host!

  • 移除已弃用的对 fixture_file_upload 传递相对于 fixture_path 的路径的支持。

5.2. 弃用

5.3. 显著变更

6. Action View

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

6.1. 移除

  • 移除已弃用的 Rails.config.action_view.raise_on_missing_translations

6.2. 弃用

6.3. 显著变更

  • 如果使用 Active Record 对象构建 URL,button_to 会从该对象推断 HTTP 动词 [method]

    button_to("Do a POST", [:do_post_action, Workshop.find(1)])
    # Before
    #=>   <input type="hidden" name="_method" value="post" autocomplete="off" />
    # After
    #=>   <input type="hidden" name="_method" value="patch" autocomplete="off" />
    

7. Action Mailer

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

7.1. 移除

  • 移除已弃用的 ActionMailer::DeliveryJobActionMailer::Parameterized::DeliveryJob,转而使用 ActionMailer::MailDeliveryJob

7.2. 弃用

7.3. 显著变更

8. Active Record

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

8.1. 移除

  • 移除 connected_to 中已弃用的 database 关键字参数。

  • 移除已弃用的 ActiveRecord::Base.allow_unsafe_raw_sql

  • 移除 configs_for 方法中已弃用的选项 :spec_name

  • 移除已弃用的对以 Rails 4.2 和 4.1 格式 YAML 加载 ActiveRecord::Base 实例的支持。

  • 移除 PostgreSQL 数据库中使用 :interval 列时的弃用警告。

    现在,间隔列将返回 ActiveSupport::Duration 对象而不是字符串。

    要保留旧行为,可以将此行添加到您的模型中

    attribute :column, :string
    
  • 移除已弃用的通过使用 "primary" 作为连接规范名称来解析连接的支持。

  • 移除已弃用的对引用 ActiveRecord::Base 对象的支持。

  • 移除已弃用的对将 ActiveRecord::Base 对象类型转换为数据库值的支持。

  • 移除已弃用的对将列传递给 type_cast 的支持。

  • 移除已弃用的 DatabaseConfig#config 方法。

  • 移除已弃用的 rake 任务

    • db:schema:load_if_ruby
    • db:structure:dump
    • db:structure:load
    • db:structure:load_if_sql
    • db:structure:dump:#{name}
    • db:structure:load:#{name}
    • db:test:load_structure
    • db:test:load_structure:#{name}
  • 移除已弃用的对 Model.reorder(nil).first 以非确定性顺序搜索的支持。

  • 移除 Tasks::DatabaseTasks.schema_up_to_date? 中已弃用的 environmentname 参数。

  • 移除已弃用的 Tasks::DatabaseTasks.dump_filename

  • 移除已弃用的 Tasks::DatabaseTasks.schema_file

  • 移除已弃用的 Tasks::DatabaseTasks.spec

  • 移除已弃用的 Tasks::DatabaseTasks.current_config

  • 移除已弃用的 ActiveRecord::Connection#allowed_index_name_length

  • 移除已弃用的 ActiveRecord::Connection#in_clause_length

  • 移除已弃用的 ActiveRecord::DatabaseConfigurations::DatabaseConfig#spec_name

  • 移除已弃用的 ActiveRecord::Base.connection_config

  • 移除已弃用的 ActiveRecord::Base.arel_attribute

  • 移除已弃用的 ActiveRecord::Base.configurations.default_hash

  • 移除已弃用的 ActiveRecord::Base.configurations.to_h

  • 移除已弃用的 ActiveRecord::Result#map!ActiveRecord::Result#collect!

  • 移除已弃用的 ActiveRecord::Base#remove_connection

8.2. 弃用

  • 已弃用 Tasks::DatabaseTasks.schema_file_type

8.3. 显著变更

  • 当块比预期更早返回时,回滚事务。

    在此更改之前,当事务块提前返回时,事务将被提交。

    问题是,在事务块内触发的超时也会导致不完整的事务被提交,因此为了避免此错误,事务块将回滚。

  • 合并同一列上的条件不再保留两个条件,而是始终被后一个条件替换。

    # Rails 6.1 (IN clause is replaced by merger side equality condition)
    Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
    # Rails 6.1 (both conflict conditions exists, deprecated)
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => []
    # Rails 6.1 with rewhere to migrate to Rails 7.0's behavior
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob]
    # Rails 7.0 (same behavior with IN clause, mergee side condition is consistently replaced)
    Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [bob]
    

9. Active Storage

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

9.1. 移除

9.2. 弃用

9.3. 显著变更

10. Active Model

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

10.1. 移除

  • 移除已弃用的将 ActiveModel::Errors 实例枚举为 Hash 的行为。

  • 移除已弃用的 ActiveModel::Errors#to_h

  • 移除已弃用的 ActiveModel::Errors#slice!

  • 移除已弃用的 ActiveModel::Errors#values

  • 移除已弃用的 ActiveModel::Errors#keys

  • 移除已弃用的 ActiveModel::Errors#to_xml

  • 移除已弃用的对将错误连接到 ActiveModel::Errors#messages 的支持。

  • 移除已弃用的对从 ActiveModel::Errors#messagesclear 错误的支持。

  • 移除已弃用的对从 ActiveModel::Errors#messagesdelete 错误的支持。

  • 移除已弃用的对在 ActiveModel::Errors#messages 中使用 []= 的支持。

  • 移除对 Marshal 和 YAML 加载 Rails 5.x 错误格式的支持。

  • 移除对 Marshal 加载 Rails 5.x ActiveModel::AttributeSet 格式的支持。

10.2. 弃用

10.3. 显著变更

11. Active Support

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

11.1. 移除

  • 移除已弃用的 config.active_support.use_sha1_digests

  • 移除已弃用的 URI.parser

  • 移除已弃用的对使用 Range#include? 检查日期时间范围中包含值的功能。

  • 移除已弃用的 ActiveSupport::Multibyte::Unicode.default_normalization_form

11.2. 弃用

  • 已弃用在 ArrayRangeDateDateTimeTimeBigDecimalFloatInteger 中将格式传递给 #to_s 的做法,转而使用 #to_fs

    此弃用是为了让 Rails 应用程序能够利用 Ruby 3.1 的一项优化,该优化可以加快某些类型对象的插值速度。

    新应用程序不会在这些类上覆盖 #to_s 方法,现有应用程序可以使用 config.active_support.disable_to_s_conversion

11.3. 显著变更

12. Active Job

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

12.1. 移除

  • 移除了当之前的回调被 throw :abort 中断时,不停止 after_enqueue/after_perform 回调的已弃用行为。

  • 移除已弃用的 :return_false_on_aborted_enqueue 选项。

12.2. 弃用

  • 已弃用 Rails.config.active_job.skip_after_callbacks_if_terminated

12.3. 显著变更

13. Action Text

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

13.1. 移除

13.2. 弃用

13.3. 显著变更

14. Action Mailbox

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

14.1. 移除

  • 移除已弃用的 Rails.application.credentials.action_mailbox.mailgun_api_key

  • 移除已弃用的环境变量 MAILGUN_INGRESS_API_KEY

14.2. 弃用

14.3. 显著变更

15. Ruby on Rails 指南

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

15.1. 显著变更

16. 致谢

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



回到顶部