guides/source/7_0_release_notes.md
DO NOT READ THIS FILE ON GITHUB, GUIDES ARE PUBLISHED ON https://guides.rubyonrails.org.
Highlights in Rails 7.0:
If you're upgrading an existing application, it's a great idea to have good test coverage before going in. You should also first upgrade to Rails 6.1 in case you haven't and make sure your application still runs as expected before attempting an update to Rails 7.0. A list of things to watch out for when upgrading is available in the Upgrading Ruby on Rails guide.
Please refer to the Changelog for detailed changes.
config in dbconsole.Sprockets is now an optional dependency
The gem rails doesn't depend on sprockets-rails anymore. If your application still needs to use Sprockets,
make sure to add sprockets-rails to your Gemfile.
gem "sprockets-rails"
Please refer to the Changelog for detailed changes.
Please refer to the Changelog for detailed changes.
Remove deprecated ActionDispatch::Response.return_only_media_type_on_content_type.
Remove deprecated Rails.config.action_dispatch.hosts_response_app.
Remove deprecated ActionDispatch::SystemTestCase#host!.
Remove deprecated support to passing a path to fixture_file_upload relative to fixture_path.
Please refer to the Changelog for detailed changes.
Rails.config.action_view.raise_on_missing_translations.button_to infers HTTP verb [method] from an Active Record object if object is used to build 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" />
Please refer to the Changelog for detailed changes.
ActionMailer::DeliveryJob and ActionMailer::Parameterized::DeliveryJob
in favor of ActionMailer::MailDeliveryJob.Please refer to the Changelog for detailed changes.
Remove deprecated database kwarg from connected_to.
Remove deprecated ActiveRecord::Base.allow_unsafe_raw_sql.
Remove deprecated option :spec_name in the configs_for method.
Remove deprecated support to YAML load ActiveRecord::Base instance in the Rails 4.2 and 4.1 formats.
Remove deprecation warning when :interval column is used in PostgreSQL database.
Now, interval columns will return ActiveSupport::Duration objects instead of strings.
To keep the old behavior, you can add this line to your model:
attribute :column, :string
Remove deprecated support to resolve connection using "primary" as connection specification name.
Remove deprecated support to quote ActiveRecord::Base objects.
Remove deprecated support to type cast to database values ActiveRecord::Base objects.
Remove deprecated support to pass a column to type_cast.
Remove deprecated DatabaseConfig#config method.
Remove deprecated rake tasks:
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}Remove deprecated support to Model.reorder(nil).first to search using non-deterministic order.
Remove deprecated environment and name arguments from Tasks::DatabaseTasks.schema_up_to_date?.
Remove deprecated Tasks::DatabaseTasks.dump_filename.
Remove deprecated Tasks::DatabaseTasks.schema_file.
Remove deprecated Tasks::DatabaseTasks.spec.
Remove deprecated Tasks::DatabaseTasks.current_config.
Remove deprecated ActiveRecord::Connection#allowed_index_name_length.
Remove deprecated ActiveRecord::Connection#in_clause_length.
Remove deprecated ActiveRecord::DatabaseConfigurations::DatabaseConfig#spec_name.
Remove deprecated ActiveRecord::Base.connection_config.
Remove deprecated ActiveRecord::Base.arel_attribute.
Remove deprecated ActiveRecord::Base.configurations.default_hash.
Remove deprecated ActiveRecord::Base.configurations.to_h.
Remove deprecated ActiveRecord::Result#map! and ActiveRecord::Result#collect!.
Remove deprecated ActiveRecord::Base#remove_connection.
Tasks::DatabaseTasks.schema_file_type.Rollback transactions when the block returns earlier than expected.
Before this change, when a transaction block returned early, the transaction would be committed.
The problem is that timeouts triggered inside the transaction block was also making the incomplete transaction to be committed, so in order to avoid this mistake, the transaction block is rolled back.
Merging conditions on the same column no longer maintain both conditions, and will be consistently replaced by the latter condition.
# 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]
Please refer to the Changelog for detailed changes.
Please refer to the Changelog for detailed changes.
Remove deprecated enumeration of ActiveModel::Errors instances as a Hash.
Remove deprecated ActiveModel::Errors#to_h.
Remove deprecated ActiveModel::Errors#slice!.
Remove deprecated ActiveModel::Errors#values.
Remove deprecated ActiveModel::Errors#keys.
Remove deprecated ActiveModel::Errors#to_xml.
Remove deprecated support concat errors to ActiveModel::Errors#messages.
Remove deprecated support to clear errors from ActiveModel::Errors#messages.
Remove deprecated support to delete errors from ActiveModel::Errors#messages.
Remove deprecated support to use []= in ActiveModel::Errors#messages.
Remove support to Marshal and YAML load Rails 5.x error format.
Remove support to Marshal load Rails 5.x ActiveModel::AttributeSet format.
Please refer to the Changelog for detailed changes.
Remove deprecated config.active_support.use_sha1_digests.
Remove deprecated URI.parser.
Remove deprecated support to use Range#include? to check the inclusion of a value in
a date time range is deprecated.
Remove deprecated ActiveSupport::Multibyte::Unicode.default_normalization_form.
Deprecate passing a format to #to_s in favor of #to_fs in Array, Range, Date, DateTime, Time,
BigDecimal, Float and, Integer.
This deprecation is to allow Rails application to take advantage of a Ruby 3.1 optimization that makes interpolation of some types of objects faster.
New applications will not have the #to_s method overridden on those classes, existing applications can use
config.active_support.disable_to_s_conversion.
Please refer to the Changelog for detailed changes.
Removed deprecated behavior that was not halting after_enqueue/after_perform callbacks when a
previous callback was halted with throw :abort.
Remove deprecated :return_false_on_aborted_enqueue option.
Rails.config.active_job.skip_after_callbacks_if_terminated.Please refer to the Changelog for detailed changes.
Please refer to the Changelog for detailed changes.
Removed deprecated Rails.application.credentials.action_mailbox.mailgun_api_key.
Removed deprecated environment variable MAILGUN_INGRESS_API_KEY.
Please refer to the Changelog for detailed changes.
See the full list of contributors to Rails for the many people who spent many hours making Rails, the stable and robust framework it is. Kudos to all of them.