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::DeliveryJob和ActionMailer::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_rubydb:structure:dumpdb:structure:loaddb:structure:load_if_sqldb:structure:dump:#{name}db:structure:load:#{name}db:test:load_structuredb:test:load_structure:#{name}
移除已弃用的对
Model.reorder(nil).first以非确定性顺序搜索的支持。移除
Tasks::DatabaseTasks.schema_up_to_date?中已弃用的environment和name参数。移除已弃用的
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中clear错误的支持。移除已弃用的对从
ActiveModel::Errors#messages中delete错误的支持。移除已弃用的对在
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. 弃用
已弃用在
Array、Range、Date、DateTime、Time、BigDecimal、Float和Integer中将格式传递给#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 成为一个稳定而健壮的框架。向他们所有人致敬。