edge
Más en rubyonrails.org: Más Ruby on Rails

Notas de lanzamiento de Ruby on Rails 5.2

Aspectos destacados en Rails 5.2:

Estas notas de lanzamiento solo cubren los cambios principales. Para conocer las diversas correcciones de errores y cambios, consulte los registros de cambios o revise la lista de confirmaciones en el repositorio principal de Rails en GitHub.

1 Actualización a Rails 5.2

Si está actualizando una aplicación existente, es una buena idea tener una buena cobertura de pruebas antes de comenzar. También debe actualizar primero a Rails 5.1 en caso de que no lo haya hecho y asegurarse de que su aplicación siga funcionando como se espera antes de intentar una actualización a Rails 5.2. Una lista de cosas a tener en cuenta al actualizar está disponible en la guía Actualización de Ruby on Rails.

2 Funciones principales

2.1 Active Storage

Solicitud de extracción

Active Storage facilita la carga de archivos a un servicio de almacenamiento en la nube como Amazon S3, Google Cloud Storage o Microsoft Azure Storage y la adjunta a objetos Active Record. Viene con un servicio basado en disco local para desarrollo y pruebas, y admite la duplicación de archivos en servicios subordinados para copias de seguridad y migraciones. Puede obtener más información sobre Active Storage en la guía Descripción general de Active Storage.

2.2 Redis Cache Store

Solicitud de extracción

Rails 5.2 incluye una tienda de caché Redis incorporada. Puede obtener más información al respecto en la guía Caché con Rails: una descripción general.

2.3 HTTP/2 Early Hints

Solicitud de extracción

Rails 5.2 admite HTTP/2 Early Hints. Para iniciar el servidor con Early Hints habilitado, pase --early-hints a bin/rails server.

2.4 Credentials

Solicitud de extracción

Se agregó el archivo config/credentials.yml.enc para almacenar secretos de la aplicación de producción. Permite guardar cualquier credencial de autenticación para servicios de terceros directamente en el repositorio cifrado con una clave en el archivo config/master.key o la variable de entorno RAILS_MASTER_KEY. Esto eventualmente reemplazará a Rails.application.secrets y los secretos cifrados introducidos en Rails 5.1. Además, Rails 5.2 abre la API subyacente de Credentials, por lo que puede manejar fácilmente otras configuraciones, claves y archivos cifrados. Puede obtener más información al respecto en la guía Seguridad de las aplicaciones Rails.

2.5 Content Security Policy

Solicitud de extracción

Rails 5.2 incluye un nuevo DSL que le permite configurar una Content Security Policy para su aplicación. Puede configurar una política predeterminada global y luego anularla en función de cada recurso e incluso usar lambdas para inyectar valores por solicitud en el encabezado, como subdominios de cuenta en una aplicación multiinquilino. Puede obtener más información al respecto en la guía Seguridad de las aplicaciones Rails.

3 Railties

Consulte el registro de cambios para obtener información detallada sobre los cambios.

3.1 Obsolescencias

  • Obsoleta el método capify! en generadores y plantillas. (Pull Request)

  • Se ha obsoleto pasar el nombre del entorno como un argumento regular a los comandos rails dbconsole y rails console. En su lugar, se debe utilizar la opción -e. (Commit)

  • Obsoleta la utilización de una subclase de Rails::Application para iniciar el servidor de Rails. (Pull Request)

  • Obsoleta la devolución de llamada after_bundle en las plantillas de los complementos de Rails. (Pull Request)

3.2 Cambios destacados

  • Se agregó una sección compartida a config/database.yml que se cargará para todos los entornos. (Pull Request)

  • Agregar railtie.rb al generador de complementos. (Pull Request)

  • Limpiar los archivos de captura de pantalla en la tarea tmp:clear. (Pull Request)

  • Omitir los componentes no utilizados al ejecutar bin/rails app:update. Si la generación inicial de la aplicación omitió Action Cable, Active Record, etc., la tarea de actualización también respeta esas omisiones. (Pull Request)

  • Permitir pasar un nombre de conexión personalizado al comando rails dbconsole cuando se utiliza una configuración de base de datos de 3 niveles. Ejemplo: bin/rails dbconsole -c replica. (Commit)

  • Expandir correctamente los atajos para el nombre del entorno al ejecutar los comandos console y dbconsole. (Commit)

  • Agregar bootsnap al Gemfile predeterminado. (Pull Request)

  • Admitir - como una forma independiente de plataforma para ejecutar un script desde stdin con rails runner. (Pull Request)

  • Agregar la versión ruby x.x.x al Gemfile y crear el archivo raíz .ruby-version que contiene la versión actual de Ruby cuando se crean nuevas aplicaciones de Rails. (Pull Request)

  • Agregar la opción --skip-action-cable al generador de complementos. (Pull Request)

  • Agregar git_source al Gemfile para el generador de complementos. (Pull Request)

  • Omitir los componentes no utilizados al ejecutar bin/rails en un complemento de Rails. (Commit)

  • Optimizar la sangría de las acciones del generador. (Pull Request)

  • Optimizar la sangría de las rutas. (Pull Request)

  • Agregar la opción --skip-yarn al generador de complementos. (Pull Request)

  • Admitir múltiples argumentos de versiones para el método gem de los generadores. (Pull Request)

  • Derivar secret_key_base del nombre de la aplicación en los entornos de desarrollo y prueba. (Pull Request)

  • Agregar mini_magick al Gemfile predeterminado como comentario. (Pull Request)

  • rails new y rails plugin new obtienen Active Storage de forma predeterminada. Agregar la capacidad de omitir Active Storage con --skip-active-storage y hacerlo automáticamente cuando se utiliza --skip-active-record. (Pull Request)

4 Action Cable

Consulte el registro de cambios para obtener información detallada sobre los cambios.

4.1 Eliminaciones

  • Se eliminó el adaptador de Redis basado en eventos obsoleto. (Commit)

4.2 Cambios destacados

  • Agregar soporte para las opciones host, port, db y password en cable.yml (Pull Request)

  • Hash los identificadores de transmisión largos al utilizar el adaptador de PostgreSQL. (Pull Request)

5 Action Pack

Consulte el registro de cambios para obtener información detallada sobre los cambios.

5.1 Eliminaciones

  • Eliminar ActionController::ParamsParser::ParseError obsoleto. (Commit)

5.2 Obsolescencias

  • Obsoleto #success?, #missing? y #error? alias de ActionDispatch::TestResponse. (Pull Request)

5.3 Cambios destacados

  • Agregar soporte para claves de caché reciclables con caché de fragmentos. (Pull Request)

  • Cambiar el formato de la clave de caché para fragmentos para facilitar la depuración de claves. (Pull Request)

  • Cookies y sesiones cifradas AEAD con GCM. (Pull Request)

  • Proteger contra falsificaciones de forma predeterminada. (Pull Request)

  • Aplicar el vencimiento de las cookies firmadas/cifradas en el servidor. (Pull Request)

  • La opción :expires de las cookies admite el objeto ActiveSupport::Duration. (Pull Request)

  • Usar la configuración del servidor registrado :puma de Capybara. (Pull Request)

  • Simplificar el middleware de cookies con soporte de rotación de claves. (Pull Request)

  • Agregar capacidad para habilitar Early Hints para HTTP/2. (Pull Request)

  • Agregar soporte de Chrome sin cabeza a las pruebas del sistema. (Pull Request)

  • Agregar opción :allow_other_host al método redirect_back. (Pull Request)

  • Hacer que assert_recognizes recorra los motores montados. (Pull Request)

  • Agregar DSL para configurar la cabecera Content-Security-Policy. (Pull Request, Commit, Commit)

  • Registrar los tipos MIME de audio/video/fuente más populares admitidos por los navegadores modernos. (Pull Request)

  • Cambiar la salida de captura de pantalla de las pruebas del sistema de inline a simple de forma predeterminada. (Commit)

  • Agregar soporte de Firefox sin cabeza a las pruebas del sistema. (Pull Request)

  • Agregar X-Download-Options y X-Permitted-Cross-Domain-Policies seguros a los encabezados predeterminados. (Commit)

  • Cambiar las pruebas del sistema para establecer Puma como servidor predeterminado solo cuando el usuario no haya especificado manualmente otro servidor. (Pull Request)

  • Agregar encabezado Referrer-Policy a los encabezados predeterminados. (Commit)

  • Coincidir con el comportamiento de Hash#each en ActionController::Parameters#each. (Pull Request)

  • Agregar soporte para generación automática de nonce para Rails UJS. (Commit)

  • Actualizar el valor predeterminado de HSTS max-age a 31536000 segundos (1 año) para cumplir con el requisito mínimo de max-age para https://hstspreload.org/. (Commit)

  • Agregar método de alias to_hash a to_h para cookies. Agregar método de alias to_h a to_hash para session. (Commit)

6 Action View

Consulte el registro de cambios para obtener cambios detallados.

6.1 Eliminaciones

  • Eliminar el controlador ERB obsoleto de Erubis. (Commit)

6.2 Obsolescencias

  • Obsoleto el ayudante image_alt que solía agregar texto alternativo predeterminado a las imágenes generadas por image_tag. (Pull Request)

6.3 Cambios destacados

  • Agregar tipo :json a auto_discovery_link_tag para admitir JSON Feeds. (Pull Request)

  • Agregar opción srcset al ayudante image_tag. (Pull Request)

  • Solucionar problemas con field_error_proc que envuelve optgroup y opción de división select option. (Pull Request)

  • Cambiar form_with para generar ids de forma predeterminada. (Commit)

  • Agregar ayudante preload_link_tag. (Pull Request)

  • Permitir el uso de objetos llamables como métodos de grupo para selects agrupados. (Pull Request)

    Action Mailer

Consulte el registro de cambios para obtener cambios detallados.

6.4 Cambios destacados

7 Active Record

Consulte el registro de cambios para obtener cambios detallados.

7.1 Eliminaciones

  • Eliminar #migration_keys obsoleto. (Solicitud de extracción)

  • Eliminar el soporte obsoleto para quoted_id al convertir el tipo de un objeto Active Record. (Commit)

  • Eliminar el argumento obsoleto default de index_name_exists?. (Commit)

  • Eliminar el soporte obsoleto para pasar una clase a :class_name en las asociaciones. (Commit)

  • Eliminar los métodos obsoletos initialize_schema_migrations_table y initialize_internal_metadata_table. (Commit)

  • Eliminar el método obsoleto supports_migrations?. (Commit)

  • Eliminar el método obsoleto supports_primary_key?. (Commit)

  • Eliminar el método obsoleto ActiveRecord::Migrator.schema_migrations_table_name. (Commit)

  • Eliminar el argumento obsoleto name de #indexes. (Commit)

  • Eliminar los argumentos obsoletos de #verify!. (Commit)

  • Eliminar la configuración obsoleta .error_on_ignored_order_or_limit. (Commit)

  • Eliminar el método obsoleto #scope_chain. (Commit)

  • Eliminar el método obsoleto #sanitize_conditions. (Commit)

7.2 Obsolescencias

7.3 Cambios destacados

  • Al llamar al método de acceso dinámico a los fixtures sin argumentos, ahora devuelve todos los fixtures de este tipo. Anteriormente, este método siempre devolvía una matriz vacía. (Solicitud de extracción)

  • Corregir inconsistencia con los atributos cambiados al anular el lector de atributos de Active Record. (Solicitud de extracción)

  • Soporte para índices descendentes en MySQL. (Solicitud de extracción)

  • Corregir la primera migración de bin/rails db:forward. (Commit)

  • Generar un error UnknownMigrationVersionError en el movimiento de migraciones cuando la migración actual no existe. (Commit)

  • Respetar SchemaDumper.ignore_tables en las tareas de rake para la estructura de las bases de datos. (Solicitud de extracción)

  • Agregar ActiveRecord::Base#cache_version para admitir claves de caché reciclables a través de las nuevas entradas versionadas en ActiveSupport::Cache. Esto también significa que ActiveRecord::Base#cache_key ahora devolverá una clave estable que ya no incluye una marca de tiempo. (Solicitud de extracción)

  • Evitar la creación de un parámetro de enlace si el valor convertido es nulo. (Solicitud de extracción)

  • Usar INSERT masivo para insertar fixtures para obtener un mejor rendimiento. (Solicitud de extracción)

  • La fusión de dos relaciones que representan joins anidados ya no transforma los joins de la relación fusionada en LEFT OUTER JOIN. (Solicitud de extracción)

  • Corregir las transacciones para aplicar el estado a las transacciones secundarias. Anteriormente, si tenía una transacción anidada y la transacción externa se revertía, el registro de la transacción interna aún se marcaría como persistente. Se corrigió aplicando el estado de la transacción principal a la transacción secundaria cuando la transacción principal se revierte. Esto marcará correctamente los registros de la transacción interna como no persistentes. (Commit)

  • Corregir la carga ansiosa/precarga de asociaciones con alcance que incluye joins. (Pull Request)

  • Evitar que los errores generados por los suscriptores de notificaciones sql.active_record se conviertan en excepciones ActiveRecord::StatementInvalid. (Pull Request)

  • Omitir el almacenamiento en caché de consultas al trabajar con lotes de registros (find_each, find_in_batches, in_batches). (Commit)

  • Cambiar la serialización booleana de sqlite3 para usar 1 y 0. SQLite reconoce nativamente 1 y 0 como verdadero y falso, pero no reconoce nativamente 't' y 'f' como se serializaba anteriormente. (Pull Request)

  • Los valores construidos utilizando asignación de múltiples parámetros ahora utilizarán el valor de poscasteo para su representación en campos de formulario de un solo campo. (Commit)

  • ApplicationRecord ya no se genera al generar modelos. Si necesitas generarlo, puedes crearlo con rails g application_record. (Pull Request)

  • Relation#or ahora acepta dos relaciones que tienen valores diferentes para references solamente, ya que references puede ser llamado implícitamente por where. (Commit)

  • Al utilizar Relation#or, extraer las condiciones comunes y colocarlas antes de la condición OR. (Pull Request)

  • Agregar el método auxiliar de fixture binary. (Pull Request)

  • Adivinar automáticamente las asociaciones inversas para STI. (Pull Request)

  • Agregar la nueva clase de error LockWaitTimeout que se generará cuando se exceda el tiempo de espera de bloqueo. (Pull Request)

  • Actualizar los nombres de carga útil para la instrumentación sql.active_record para que sean más descriptivos. (Pull Request)

  • Utilizar el algoritmo dado al eliminar un índice de la base de datos. (Pull Request)

  • Pasar un Set a Relation#where ahora se comporta de la misma manera que pasar un array. (Commit)

  • PostgreSQL tsrange ahora conserva la precisión de subsegundos. (Pull Request)

  • Generar una excepción al llamar a lock! en un registro modificado. (Commit)

  • Corregido un error donde los órdenes de columna para un índice no se escribían en db/schema.rb al utilizar el adaptador SQLite. (Pull Request)

  • Corregir bin/rails db:migrate con VERSION especificado. bin/rails db:migrate con VERSION vacío se comporta como sin VERSION. Verificar el formato de VERSION: Permitir un número de versión de migración o el nombre de un archivo de migración. Generar un error si el formato de VERSION es inválido. Generar un error si la migración objetivo no existe. (Pull Request)

  • Agregar la nueva clase de error StatementTimeout que se generará cuando se exceda el tiempo de espera de la declaración. (Pull Request)

  • update_all ahora pasará sus valores a Type#cast antes de pasarlos a Type#serialize. Esto significa que update_all(foo: 'true') persistirá correctamente un booleano. (Commit)

  • Requerir que los fragmentos de SQL sin procesar se marquen explícitamente cuando se usan en métodos de consulta de relaciones. (Commit, Commit)

  • Agregar #up_only a las migraciones de la base de datos para el código que solo es relevante al migrar hacia arriba, por ejemplo, poblar una nueva columna. (Pull Request)

  • Agregar nueva clase de error QueryCanceled que se lanzará cuando se cancele una declaración debido a una solicitud del usuario. (Pull Request)

  • No permitir definir ámbitos que entren en conflicto con los métodos de instancia en Relation. (Pull Request)

  • Agregar soporte para clases de operadores de PostgreSQL a add_index. (Pull Request)

  • Registrar los llamadores de las consultas de la base de datos. (Pull Request, Pull Request, Pull Request)

  • Anular los métodos de atributo en los descendientes al restablecer la información de columna. (Pull Request)

  • Usar subconsulta para delete_all con limit o offset. (Commit)

  • Corregir inconsistencia con first(n) cuando se usa con limit(). El buscador first(n) ahora respeta el limit(), haciéndolo consistente con relation.to_a.first(n), y también con el comportamiento de last(n). (Pull Request)

  • Corregir asociaciones anidadas has_many :through en instancias de padres no persistidos. (Commit)

  • Tomar en cuenta las condiciones de asociación al eliminar registros a través de ellos. (Commit)

  • No permitir la mutación de objetos destruidos después de llamar a save o save!. (Commit)

  • Corregir problema de fusión de relaciones con left_outer_joins. (Pull Request)

  • Soporte para tablas externas de PostgreSQL. (Pull Request)

  • Limpiar el estado de transacción cuando se duplica un objeto Active Record. (Pull Request)

  • Corregir problema de expansión no realizada al pasar un objeto Array como argumento al método where utilizando una columna composed_of. (Pull Request)

  • Hacer que reflection.klass lance una excepción si polymorphic? no se usa correctamente. (Commit)

  • Corregir #columns_for_distinct de MySQL y PostgreSQL para que ActiveRecord::FinderMethods#limited_ids_for use los valores de clave primaria correctos incluso si las columnas ORDER BY incluyen la clave primaria de otra tabla. (Commit)

  • Corregir problema de dependent: :destroy en la relación has_one/belongs_to donde la clase padre se eliminaba cuando el hijo no lo estaba. (Commit)

  • Las conexiones inactivas de la base de datos (anteriormente solo las conexiones huérfanas) ahora se eliminan periódicamente por el recolector de conexiones del grupo de conexiones. (Commit)

8 Active Model

Consulte el registro de cambios para obtener cambios detallados.

8.1 Cambios destacados

  • Corregir los métodos #keys, #values en ActiveModel::Errors. Cambiar #keys para que solo devuelva las claves que no tienen mensajes vacíos. Cambiar #values para que solo devuelva los valores no vacíos. (Pull Request)

  • Agregar el método #merge! para ActiveModel::Errors. (Pull Request)

  • Permitir pasar un Proc o un símbolo a las opciones del validador de longitud. (Pull Request)

  • Ejecutar la validación de ConfirmationValidator cuando el valor de _confirmation es false. (Pull Request)

  • Los modelos que utilizan la API de atributos con un valor predeterminado de tipo proc ahora se pueden serializar. (Commit)

  • No perder todas las múltiples :includes con opciones en la serialización. (Commit)

9 Active Support

Consulte el registro de cambios para obtener cambios detallados.

9.1 Eliminaciones

  • Eliminar el filtro de cadena :if y :unless deprecado para los callbacks. (Commit)

  • Eliminar la opción halt_callback_chains_on_return_false deprecada. (Commit)

    Deprecaciones

  • Deprecar el método Module#reachable?. (Pull Request)

  • Deprecar secrets.secret_token. (Commit)

9.2 Cambios destacados

  • Agregar fetch_values para HashWithIndifferentAccess. (Pull Request)

  • Agregar soporte para :offset en Time#change. (Commit)

  • Agregar soporte para :offset y :zone en ActiveSupport::TimeWithZone#change. (Commit)

  • Pasar el nombre de la gema y el horizonte de depreciación a las notificaciones de depreciación. (Pull Request)

  • Agregar soporte para entradas de caché versionadas. Esto permite que las tiendas de caché reciclen claves de caché, lo que ahorra mucho almacenamiento en casos con cambios frecuentes. Funciona junto con la separación de #cache_key y #cache_version en Active Record y su uso en el almacenamiento en caché de fragmentos de Action Pack. (Pull Request)

  • Agregar ActiveSupport::CurrentAttributes para proporcionar un singleton de atributos aislados en el hilo. El caso de uso principal es mantener todos los atributos por solicitud fácilmente disponibles para todo el sistema. (Pull Request)

  • #singularize y #pluralize ahora respetan los incontables para el idioma especificado. (Commit)

  • Agregar opción predeterminada a class_attribute. (Pull Request)

  • Agregar Date#prev_occurring y Date#next_occurring para devolver el día de la semana siguiente/anterior especificado. (Pull Request)

  • Agregar opción predeterminada a los accesores de atributos de módulo y clase. (Pull Request)

  • Caché: write_multi. (Pull Request)

  • Establecer por defecto ActiveSupport::MessageEncryptor para usar cifrado AES 256 GCM. (Pull Request)

  • Agregar ayudante freeze_time que congela el tiempo en Time.now en las pruebas. (Pull Request)

  • Hacer que el orden de Hash#reverse_merge! sea consistente con HashWithIndifferentAccess. (Pull Request)

  • Agregar soporte para propósito y expiración a ActiveSupport::MessageVerifier y ActiveSupport::MessageEncryptor. (Pull Request)

  • Actualizar String#camelize para proporcionar retroalimentación cuando se pasa una opción incorrecta. (Pull Request)

  • Module#delegate_missing_to ahora genera un DelegationError si el objetivo es nulo, similar a Module#delegate. (Pull Request)

  • Agregar ActiveSupport::EncryptedFile y ActiveSupport::EncryptedConfiguration. (Pull Request)

  • Agregar config/credentials.yml.enc para almacenar secretos de la aplicación de producción. (Pull Request)

  • Agregar soporte de rotación de claves a MessageEncryptor y MessageVerifier. (Pull Request)

  • Devolver una instancia de HashWithIndifferentAccess desde HashWithIndifferentAccess#transform_keys. (Pull Request)

  • Hash#slice ahora utiliza la definición incorporada de Ruby 2.5+ si está definida. (Commit)

  • IO#to_json ahora devuelve la representación to_s, en lugar de intentar convertir a un array. Esto soluciona un error donde IO#to_json generaba un IOError al llamarlo en un objeto no legible. (Pull Request)

  • Agregar la misma firma de método para Time#prev_day y Time#next_day de acuerdo con Date#prev_day, Date#next_day. Permite pasar un argumento para Time#prev_day y Time#next_day. (Commit)

  • Agregar la misma firma de método para Time#prev_month y Time#next_month de acuerdo con Date#prev_month, Date#next_month. Permite pasar un argumento para Time#prev_month y Time#next_month. (Commit)

  • Agregar la misma firma de método para Time#prev_year y Time#next_year de acuerdo con Date#prev_year, Date#next_year. Permite pasar un argumento para Time#prev_year y Time#next_year. (Commit)

  • Corregir el soporte de acrónimos en humanize. (Commit)

  • Permitir Range#include? en rangos TWZ. (Pull Request)

  • Caché: Habilitar compresión de forma predeterminada para valores > 1kB. (Pull Request)

  • Almacenamiento de caché en Redis. (Pull Request, Pull Request)

  • Manejar errores de TZInfo::AmbiguousTime. (Pull Request)

  • MemCacheStore: Soporte para expirar contadores. (Commit)

  • Hacer que ActiveSupport::TimeZone.all devuelva solo zonas horarias que estén en ActiveSupport::TimeZone::MAPPING. (Pull Request)

  • Cambiar el comportamiento predeterminado de ActiveSupport::SecurityUtils.secure_compare, para que no se filtre información de longitud incluso para cadenas de longitud variable. Renombrar el antiguo ActiveSupport::SecurityUtils.secure_compare a fixed_length_secure_compare, y comenzar a generar un ArgumentError en caso de discrepancia de longitud de las cadenas pasadas. (Pull Request)

  • Usar SHA-1 para generar resúmenes no sensibles, como el encabezado ETag. (Pull Request, Pull Request)

  • assert_changes siempre afirmará que la expresión cambia, independientemente de las combinaciones de argumentos from: y to:. (Pull Request)

  • Agregar instrumentación faltante para read_multi en ActiveSupport::Cache::Store. (Pull Request)

  • Soporte de hash como primer argumento en assert_difference. Esto permite especificar múltiples diferencias numéricas en la misma afirmación. (Pull Request)

  • Caché: Aceleración de read_multi y fetch_multi en MemCache y Redis. Leer de la caché en memoria local antes de consultar el backend. (Commit)

10 Active Job

Consulte el registro de cambios para obtener cambios detallados.

10.1 Cambios destacados

  • Permitir pasar un bloque a ActiveJob::Base.discard_on para permitir manejo personalizado de trabajos descartados. (Pull Request)

11 Ruby on Rails Guides

Consulte el registro de cambios para obtener cambios detallados.

11.1 Cambios destacados

12 Créditos

Consulte la lista completa de colaboradores de Rails para conocer a las muchas personas que dedicaron muchas horas a hacer de Rails, el marco estable y robusto que es. Felicitaciones a todos ellos.

Comentarios

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

Por favor, contribuye si encuentras algún error tipográfico o factual. Para empezar, puedes leer nuestra contribución a la documentación sección.

También puedes encontrar contenido incompleto o desactualizado. Por favor, añade cualquier documentación faltante para main. Asegúrate de revisar Edge Guides primero para verificar si los problemas ya están resueltos o no en la rama principal. Consulta las Directrices de las Guías de Ruby on Rails para el estilo y las convenciones.

Si por alguna razón encuentras algo que corregir pero no puedes solucionarlo tú mismo, por favor abre un problema.

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