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_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 重要更改
button_to
从 Active Record 对象中推断出 HTTP 动词 [method],如果使用对象构建 URLbutton_to("执行 POST", [:do_post_action, Workshop.find(1)]) # 之前 #=> <input type="hidden" name="_method" value="post" autocomplete="off" /> # 现在 #=> <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
kwarg。移除已弃用的
ActiveRecord::Base.allow_unsafe_raw_sql
。移除
configs_for
方法中:spec_name
选项的已弃用支持。移除在 Rails 4.2 和 4.1 格式中使用 YAML 加载
ActiveRecord::Base
实例的已弃用支持。移除在 PostgreSQL 数据库中使用
:interval
列时的弃用警告。现在,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?
中的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 子句被合并方的等式条件替换) Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob] # Rails 6.1(两个冲突条件都存在,已弃用) Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [] # Rails 6.1 使用 rewhere 迁移到 Rails 7.0 的行为 Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob] # Rails 7.0(与 IN 子句相同的行为,合并方条件始终被替换) 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]
Active Storage
请参考Changelog以获取详细的更改信息。
8.4 移除
8.5 废弃
8.6 重要更改
9 Active Model
请参考Changelog以获取详细的更改信息。
9.1 移除
移除将
ActiveModel::Errors
实例枚举为哈希的废弃用法。移除废弃的
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
中使用[]=
的支持。移除对Rails 5.x错误格式的Marshal和YAML加载支持。
移除对Rails 5.x
ActiveModel::AttributeSet
格式的Marshal加载支持。
9.2 废弃
9.3 重要更改
10 Active Support
请参考Changelog以获取详细的更改信息。
10.1 移除
移除废弃的
config.active_support.use_sha1_digests
。移除废弃的
URI.parser
。移除使用
Range#include?
检查日期时间范围中值的包含性的废弃用法。移除废弃的
ActiveSupport::Multibyte::Unicode.default_normalization_form
。
10.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
。
10.3 重要更改
11 Active Job
请参考Changelog以获取详细的更改信息。
11.1 移除
移除当先一个回调使用
throw :abort
终止时,不会停止after_enqueue
/after_perform
回调的废弃行为。移除废弃的
:return_false_on_aborted_enqueue
选项。
11.2 废弃
- 废弃
Rails.config.active_job.skip_after_callbacks_if_terminated
。
11.3 重要更改
12 Action Text
请参考Changelog以获取详细的更改信息。
12.1 移除
12.2 废弃
12.3 重要更改
13 Action Mailbox
请参考Changelog以获取详细的更改信息。
13.1 移除
移除废弃的
Rails.application.credentials.action_mailbox.mailgun_api_key
。移除废弃的环境变量
MAILGUN_INGRESS_API_KEY
。
13.2 废弃
13.3 重要更改
14 Ruby on Rails Guides
请参考Changelog以获取详细的更改信息。
14.1 重要更改
15 Credits
请参阅Rails的完整贡献者列表,感谢那些花费了许多时间使Rails成为稳定而强大的框架的众多人员。向他们致敬。
反馈
欢迎您帮助改进本指南的质量。
如果您发现任何拼写错误或事实错误,请贡献您的意见。 要开始,请阅读我们的 文档贡献 部分。
您还可能会发现不完整的内容或过时的内容。 请为主要内容添加任何缺失的文档。请先检查 Edge 指南,以验证问题是否已经修复或尚未修复。 请参阅 Ruby on Rails 指南准则 以了解样式和规范。
如果您发现需要修复但无法自行修复的问题,请 提交问题。
最后但同样重要的是,欢迎您在 官方 Ruby on Rails 论坛 上讨论有关 Ruby on Rails 文档的任何问题。