NO LEAS ESTE ARCHIVO EN GITHUB, LAS GUÍAS ESTÁN PUBLICADAS EN https://guides.rubyonrails.org.

Notas de la versión de Ruby on Rails 7.0

Aspectos destacados en Rails 7.0:


1 Actualización a Rails 7.0

Si estás actualizando una aplicación existente, es una gran idea tener una buena cobertura de pruebas antes de comenzar. También deberías primero actualizar a Rails 6.1 en caso de que no lo hayas hecho y asegurarte de que tu aplicación aún funcione como se espera antes de intentar una actualización a Rails 7.0. Una lista de cosas a tener en cuenta al actualizar está disponible en la guía Actualización de Ruby on Rails.

2 Características principales

3 Railties

Por favor, consulta el Changelog para obtener cambios detallados.

3.1 Eliminaciones

  • Eliminar config obsoleto en dbconsole.

3.2 Deprecaciones

3.3 Cambios notables

  • Sprockets ahora es una dependencia opcional

La gema rails ya no depende de sprockets-rails. Si tu aplicación aún necesita usar Sprockets, asegúrate de agregar sprockets-rails a tu Gemfile.

  gem "sprockets-rails"

4 Action Cable

Por favor, consulta el Changelog para obtener cambios detallados.

4.1 Eliminaciones

4.2 Deprecaciones

4.3 Cambios notables

5 Action Pack

Por favor, consulta el Changelog para obtener cambios detallados.

5.1 Eliminaciones

  • Eliminar ActionDispatch::Response.return_only_media_type_on_content_type obsoleto.

  • Eliminar Rails.config.action_dispatch.hosts_response_app obsoleto.

  • Eliminar ActionDispatch::SystemTestCase#host! obsoleto.

  • Eliminar soporte obsoleto para pasar una ruta a fixture_file_upload relativa a fixture_path.

5.2 Deprecaciones

5.3 Cambios notables

6 Action View

Por favor, consulta el Changelog para obtener cambios detallados.

6.1 Eliminaciones

  • Eliminar Rails.config.action_view.raise_on_missing_translations obsoleto.

6.2 Deprecaciones

6.3 Cambios notables

  • button_to infiere el verbo HTTP [método] de un objeto Active Record si el objeto se usa para construir la URL.
  button_to("Do a POST", [:do_post_action, Workshop.find(1)])
  # Antes
  #=>   <input type="hidden" name="_method" value="post" autocomplete="off" />
  # Después
  #=>   <input type="hidden" name="_method" value="patch" autocomplete="off" />

7 Action Mailer

Por favor, consulta el Changelog para obtener cambios detallados.

7.1 Eliminaciones

  • Eliminar ActionMailer::DeliveryJob y ActionMailer::Parameterized::DeliveryJob obsoletos en favor de ActionMailer::MailDeliveryJob.

7.2 Deprecaciones

7.3 Cambios notables

8 Active Record

Por favor, consulta el Changelog para obtener cambios detallados.

8.1 Eliminaciones

  • Eliminar argumento database obsoleto de connected_to.

  • Eliminar ActiveRecord::Base.allow_unsafe_raw_sql obsoleto.

  • Eliminar opción :spec_name obsoleta en el método configs_for.

  • Eliminar soporte obsoleto para cargar YAML ActiveRecord::Base en los formatos de Rails 4.2 y 4.1.

  • Eliminar advertencia de deprecación cuando se utiliza la columna :interval en la base de datos PostgreSQL.

Ahora, las columnas de intervalo devolverán objetos ActiveSupport::Duration en lugar de cadenas.

Para mantener el comportamiento anterior, puedes agregar esta línea a tu modelo:

  attribute :column, :string
  • Eliminar soporte obsoleto para resolver la conexión usando "primary" como nombre de especificación de conexión.

  • Eliminar soporte obsoleto para citar objetos ActiveRecord::Base.

  • Eliminar soporte obsoleto para convertir a valores de base de datos objetos ActiveRecord::Base.

  • Eliminar soporte obsoleto para pasar una columna a type_cast.

  • Eliminar método DatabaseConfig#config obsoleto.

  • Eliminar tareas rake obsoletas:

    • 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}
  • Eliminar soporte obsoleto para Model.reorder(nil).first para buscar usando orden no determinista.

  • Eliminar argumentos environment y name obsoletos de Tasks::DatabaseTasks.schema_up_to_date?.

  • Eliminar Tasks::DatabaseTasks.dump_filename obsoleto.

  • Eliminar Tasks::DatabaseTasks.schema_file obsoleto.

  • Eliminar Tasks::DatabaseTasks.spec obsoleto.

  • Eliminar Tasks::DatabaseTasks.current_config obsoleto.

  • Eliminar ActiveRecord::Connection#allowed_index_name_length obsoleto.

  • Eliminar ActiveRecord::Connection#in_clause_length obsoleto.

  • Eliminar ActiveRecord::DatabaseConfigurations::DatabaseConfig#spec_name obsoleto.

  • Eliminar ActiveRecord::Base.connection_config obsoleto.

  • Eliminar ActiveRecord::Base.arel_attribute obsoleto.

  • Eliminar ActiveRecord::Base.configurations.default_hash obsoleto.

  • Eliminar ActiveRecord::Base.configurations.to_h obsoleto.

  • Eliminar ActiveRecord::Result#map! y ActiveRecord::Result#collect! obsoletos.

  • Eliminar ActiveRecord::Base#remove_connection obsoleto.

8.2 Deprecaciones

  • Deprecado Tasks::DatabaseTasks.schema_file_type.

8.3 Cambios notables

  • Revertir transacciones cuando el bloque regresa antes de lo esperado.

Antes de este cambio, cuando un bloque de transacción regresaba temprano, la transacción se comprometía.

El problema es que los tiempos de espera activados dentro del bloque de transacción también hacían que la transacción incompleta se comprometiera, por lo que para evitar este error, el bloque de transacción se revierte.

  • Fusionar condiciones en la misma columna ya no mantiene ambas condiciones, y serán reemplazadas consistentemente por la última condición.
  # Rails 6.1 (la cláusula IN es reemplazada por la condición de igualdad del lado de la fusión)
  Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
  # Rails 6.1 (ambas condiciones conflictivas existen, obsoleto)
  Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => []
  # Rails 6.1 con rewhere para migrar al comportamiento de Rails 7.0
  Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob]
  # Rails 7.0 (mismo comportamiento con cláusula IN, la condición del lado de la fusión es reemplazada consistentemente)
  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

Por favor, consulta el Changelog para obtener cambios detallados.

9.1 Eliminaciones

9.2 Deprecaciones

9.3 Cambios notables

10 Active Model

Por favor, consulta el Changelog para obtener cambios detallados.

10.1 Eliminaciones

  • Eliminar enumeración obsoleta de instancias de ActiveModel::Errors como un Hash.

  • Eliminar ActiveModel::Errors#to_h obsoleto.

  • Eliminar ActiveModel::Errors#slice! obsoleto.

  • Eliminar ActiveModel::Errors#values obsoleto.

  • Eliminar ActiveModel::Errors#keys obsoleto.

  • Eliminar ActiveModel::Errors#to_xml obsoleto.

  • Eliminar soporte obsoleto para concatenar errores a ActiveModel::Errors#messages.

  • Eliminar soporte obsoleto para clear errores de ActiveModel::Errors#messages.

  • Eliminar soporte obsoleto para delete errores de ActiveModel::Errors#messages.

  • Eliminar soporte obsoleto para usar []= en ActiveModel::Errors#messages.

  • Eliminar soporte para cargar con Marshal y YAML el formato de errores de Rails 5.x.

  • Eliminar soporte para cargar con Marshal el formato de ActiveModel::AttributeSet de Rails 5.x.

10.2 Deprecaciones

10.3 Cambios notables

11 Active Support

Por favor, consulta el Changelog para obtener cambios detallados.

11.1 Eliminaciones

  • Eliminar config.active_support.use_sha1_digests obsoleto.

  • Eliminar URI.parser obsoleto.

  • Eliminar soporte obsoleto para usar Range#include? para verificar la inclusión de un valor en un rango de fecha y hora.

  • Eliminar ActiveSupport::Multibyte::Unicode.default_normalization_form obsoleto.

11.2 Deprecaciones

  • Deprecado pasar un formato a #to_s en favor de #to_fs en Array, Range, Date, DateTime, Time, BigDecimal, Float e Integer.

Esta deprecación es para permitir que las aplicaciones Rails aprovechen una optimización de Ruby 3.1 que hace que la interpolación de algunos tipos de objetos sea más rápida.

Las nuevas aplicaciones no tendrán el método #to_s sobrescrito en esas clases, las aplicaciones existentes pueden usar config.active_support.disable_to_s_conversion.

11.3 Cambios notables

12 Active Job

Por favor, consulta el Changelog para obtener cambios detallados.

12.1 Eliminaciones

  • Eliminado comportamiento obsoleto que no detenía las devoluciones de llamada after_enqueue/after_perform cuando una devolución de llamada anterior se detenía con throw :abort.

  • Eliminar opción :return_false_on_aborted_enqueue obsoleta.

12.2 Deprecaciones

  • Deprecado Rails.config.active_job.skip_after_callbacks_if_terminated.

12.3 Cambios notables

13 Action Text

Por favor, consulta el Changelog para obtener cambios detallados.

13.1 Eliminaciones

13.2 Deprecaciones

13.3 Cambios notables

14 Action Mailbox

Por favor, consulta el Changelog para obtener cambios detallados.

14.1 Eliminaciones

  • Eliminado Rails.application.credentials.action_mailbox.mailgun_api_key obsoleto.

  • Eliminada variable de entorno MAILGUN_INGRESS_API_KEY obsoleta.

14.2 Deprecaciones

14.3 Cambios notables

15 Guías de Ruby on Rails

Por favor, consulta el Changelog para obtener cambios detallados.

15.1 Cambios notables

16 Créditos

Consulta la lista completa de contribuyentes a Rails para conocer a las muchas personas que dedicaron muchas horas a hacer de Rails el marco estable y robusto que es. Kudos a todos ellos.


Comentarios

Se te anima a ayudar a mejorar la calidad de esta guía.

Por favor contribuye si ves algún error tipográfico o errores fácticos. Para comenzar, puedes leer nuestra sección de contribuciones a la documentación.

También puedes encontrar contenido incompleto o cosas que no están actualizadas. Por favor agrega cualquier documentación faltante para main. Asegúrate de revisar Guías Edge primero para verificar si los problemas ya están resueltos o no en la rama principal. Revisa las Guías de Ruby on Rails para estilo y convenciones.

Si por alguna razón detectas algo que corregir pero no puedes hacerlo tú mismo, por favor abre un issue.

Y por último, pero no menos importante, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.