Ключевые новинки в 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 стабильнее и надёжнее. Спасибо им всем.