Ключевые новинки в Rails 7.0:
Прежде чем апгрейднуть существующее приложение, было бы хорошо иметь перед этим покрытие тестами. Также, до попытки обновиться до Rails 7.0, необходимо сначала произвести апгрейд до Rails 6.1 и убедиться, что приложение все еще выполняется так, как нужно. Список вещей, которые нужно выполнить для апгрейда доступен в руководстве Апгрейд Ruby on Rails.
За подробностями обратитесь к Changelog.
config
в dbconsole
.
Sprockets теперь опциональная зависимость
Гем rails
больше не зависим от sprockets-rails
. Если вашему приложению все еще необходимо использовать Sprockets, убедитесь, что добавили sprockets-rails
в свой Gemfile.
gem "sprockets-rails"
За подробностями обратитесь к Changelog.
За подробностями обратитесь к Changelog.
Удален устаревший ActionDispatch::Response.return_only_media_type_on_content_type
.
Удален устаревший Rails.config.action_dispatch.hosts_response_app
.
Удален устаревший ActionDispatch::SystemTestCase#host!
.
Удалена устаревшая поддержка передачи пути в fixture_file_upload
относительно fixture_path
.
За подробностями обратитесь к Changelog.
Rails.config.action_view.raise_on_missing_translations
.
button_to
выводит действие HTTP [метод] из объекта Active Record, если для создания URL использован объект
button_to("Do a 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" />
За подробностями обратитесь к Changelog.
ActionMailer::DeliveryJob
и ActionMailer::Parameterized::DeliveryJob
в пользу ActionMailer::MailDeliveryJob
.
За подробностями обратитесь к Changelog.
Удален устаревший аргумент - ключевое слово database
из connected_to
.
Удален устаревший ActiveRecord::Base.allow_unsafe_raw_sql
.
Удалена устаревшая опция :spec_name
в методе configs_for
.
Удалена устаревшая поддержка загрузки YAML экземпляра ActiveRecord::Base
в форматах Rails 4.2 и 4.1.
Удалены предупреждения об устаревании, когда столбец :interval
используется в базе данных PostgreSQL.
Теперь интервальные столбцы будут возвращать объекты 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
искать с помощью недетерминированного упорядочивания.
Удалены устаревшие аргументы environment
и name
из Tasks::DatabaseTasks.schema_up_to_date?
.
Удален устаревший 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
.
Tasks::DatabaseTasks.schema_file_type
.
Откат транзакций, когда блок возвращает раньше, чем ожидается.
До этого изменения, когда блок транзакции возвращал рано, транзакция подтверждалась.
Проблема в том, что таймауты, вызванные внутри блока транзакции, также приводили к тому, что незавершенная транзакция была подтверждена, поэтому для избежания этой ошибки, блок транзакции будет откачен.
Слияние условий на тот же самый столбец больше не поддерживает оба условия, и будет последовательно заменено на более позднее условие.
# 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, чтобы мигрировать на поведение 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]
За подробностями обратитесь к Changelog.
За подробностями обратитесь к Changelog.
Удален устаревший перебор экземпляров ActiveModel::Errors
как Hash.
Удален устаревший ActiveModel::Errors#to_h
.
Удален устаревший ActiveModel::Errors#slice!
.
Удален устаревший ActiveModel::Errors#values
.
Удален устаревший ActiveModel::Errors#keys
.
Удален устаревший ActiveModel::Errors#to_xml
.
Удалена устаревшая поддержка соединения ошибок в ActiveModel::Errors#messages
.
Удалена устаревшая поддержка clear
для ошибок из ActiveModel::Errors#messages
.
Удалена устаревшая поддержка delete
для ошибок из ActiveModel::Errors#messages
.
Удалена устаревшая поддержка использования []=
в ActiveModel::Errors#messages
.
Удалена поддержка в загрузке Marshal и YAML формата ошибок Rails 5.x.
Удалена поддержка в загрузке Marshal формата Rails 5.x ActiveModel::AttributeSet
.
За подробностями обратитесь к Changelog.
Удален устаревший config.active_support.use_sha1_digests
.
Удален устаревший URI.parser
.
Удалена устаревшая поддержка использования Range#include?
для проверки включения значения в интервал даты/времени.
Удален устаревший ActiveSupport::Multibyte::Unicode.default_normalization_form
.
Устарела передача формата в #to_s
в пользу #to_fs
в Array
, Range
, Date
, DateTime
, Time
, BigDecimal
, Float
и Integer
.
Это устаревание для того, чтобы позволить приложениям Rails воспользоваться оптимизацией Ruby 3.1, которая делает интерполяцию для некоторых типов объектов быстрее.
Новые приложения не будут иметь переопределенный метод #to_s
на этих классах, в существующих приложениях можно использовать config.active_support.disable_to_s_conversion
.
За подробностями обратитесь к Changelog.
Удалено устаревшее поведение, не прерывающее колбэки after_enqueue
/after_perform
, когда предыдущий колбэк был прерван с помощью throw :abort
.
Удалена устаревшая опция :return_false_on_aborted_enqueue
.
Rails.config.active_job.skip_after_callbacks_if_terminated
.
За подробностями обратитесь к Changelog.
За подробностями обратитесь к Changelog.
Удален устаревший Rails.application.credentials.action_mailbox.mailgun_api_key
.
Удалена устаревшая переменная окружения MAILGUN_INGRESS_API_KEY
.
За подробностями обратитесь к Changelog.
Взгляните на полный список контрибьюторов Rails, на людей, которые потратили много часов, сделав Rails стабильнее и надёжнее. Спасибо им всем.