更多内容请访问 rubyonrails.org:

1 升级到 Rails 7.0

如果你要升级现有应用程序,建议在进行升级之前先做好测试覆盖率。你还应该先升级到 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_path 的路径传递给 fixture_file_upload 的支持。

5.2 弃用

5.3 值得注意的更改

6 Action View

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

6.1 移除

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

6.2 弃用

6.3 值得注意的更改

  • button_to 从 Active Record 对象中推断出 HTTP 动词 [method](如果对象用于构建 URL)

    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 对象类型转换为数据库值的 supports。

  • 移除对将列传递给 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#messages 清除错误的支持。

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

  • 移除已弃用的在 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 的所有贡献者列表



返回顶部