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::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
对象类型转换为数据库值的 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?
中已弃用的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
清除错误的支持。移除已弃用的从
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 已弃用功能
弃用在
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 的所有贡献者列表。