1 Actualización a Rails 5.0
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 4.2 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.0. 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 Action Cable
Action Cable es un nuevo marco en Rails 5.0. Integra de manera transparente WebSockets con el resto de su aplicación Rails.
Action Cable permite escribir características en tiempo real en Ruby en el mismo estilo y forma que el resto de su aplicación Rails, al mismo tiempo que es eficiente y escalable. Es una oferta de pila completa que proporciona tanto un marco de JavaScript en el lado del cliente como un marco de Ruby en el lado del servidor. Tiene acceso a su modelo de dominio completo escrito con Active Record o su ORM de elección.
Consulte la guía Descripción general de Action Cable para obtener más información.
2.2 Aplicaciones API
Rails ahora se puede utilizar para crear aplicaciones API más reducidas. Esto es útil para crear y servir API similares a la de Twitter o GitHub, que se pueden utilizar para servir aplicaciones públicas, así como aplicaciones personalizadas.
Puede generar una nueva aplicación Rails API utilizando:
$ rails new my_api --api
Esto hará tres cosas principales:
- Configurar su aplicación para que comience con un conjunto más limitado de middleware que lo normal. Específicamente, no incluirá ningún middleware principalmente útil para aplicaciones de navegador (como el soporte de cookies) de forma predeterminada.
- Hacer que
ApplicationController
herede deActionController::API
en lugar deActionController::Base
. Al igual que con el middleware, esto omitirá cualquier módulo de Action Controller que proporcione funcionalidades utilizadas principalmente por aplicaciones de navegador. - Configurar los generadores para omitir la generación de vistas, ayudantes y activos cuando se genera un nuevo recurso.
La aplicación proporciona una base para API, que luego se puede configurar para incluir funcionalidad según las necesidades de la aplicación. Consulte la guía Usando Rails para aplicaciones solo de API para obtener más información.
2.3 API de atributos de Active Record
Define un atributo con un tipo en un modelo. Anulará el tipo de los atributos existentes si es necesario.
Esto permite controlar cómo se convierten los valores hacia y desde SQL cuando se asignan a un modelo.
También cambia el comportamiento de los valores pasados a ActiveRecord::Base.where
, lo que nos permite usar nuestros objetos de dominio en gran parte de Active Record,
sin tener que depender de detalles de implementación o parches de monkey.
Algunas cosas que se pueden lograr con esto:
- Se puede anular el tipo detectado por Active Record.
- También se puede proporcionar un valor predeterminado.
- Los atributos no necesitan estar respaldados por una columna de base de datos.
# db/schema.rb
create_table :store_listings, force: true do |t|
t.decimal :price_in_cents
t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')
# antes
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"
class StoreListing < ActiveRecord::Base
attribute :price_in_cents, :integer # tipo personalizado
attribute :my_string, :string, default: "new default" # valor predeterminado
attribute :my_default_proc, :datetime, default: -> { Time.now } # valor predeterminado
attribute :field_without_db_column, :integer, array: true
end
# después
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}
Creando tipos personalizados:
Puede definir sus propios tipos personalizados, siempre y cuando respondan
a los métodos definidos en el tipo de valor. El método deserialize
o
cast
se llamará en su objeto de tipo, con la entrada sin procesar de la
base de datos o de sus controladores. Esto es útil, por ejemplo, al hacer conversiones personalizadas,
como datos de dinero.
Consulta:
Cuando se llama a ActiveRecord::Base.where
, utilizará
el tipo definido por la clase del modelo para convertir el valor a SQL,
llamando a serialize
en su objeto de tipo.
Esto le da a los objetos la capacidad de especificar cómo convertir valores al realizar consultas SQL.
Seguimiento de cambios:
El tipo de un atributo puede cambiar cómo se realiza el seguimiento de cambios. Consulte su documentación para obtener una descripción detallada.
2.4 Ejecutor de pruebas
Se ha introducido un nuevo ejecutor de pruebas para mejorar las capacidades de ejecución de pruebas en Rails.
Para usar este ejecutor de pruebas, simplemente escriba bin/rails test
.
El ejecutor de pruebas está inspirado en RSpec
, minitest-reporters
, maxitest
y otros.
Incluye algunos de estos avances destacados:
- Ejecutar una sola prueba utilizando el número de línea de la prueba.
- Ejecutar varias pruebas señalando al número de línea de las pruebas.
- Mejora en los mensajes de error, que también facilitan la repetición de las pruebas fallidas.
- Fallar rápidamente usando la opción
-f
, para detener las pruebas inmediatamente al producirse un fallo, en lugar de esperar a que se complete el conjunto de pruebas. - Retrasar la salida de las pruebas hasta el final de una ejecución completa de pruebas utilizando la opción
-d
. - Salida completa de la traza de excepción utilizando la opción
-b
. - Integración con minitest para permitir opciones como
-s
para datos de semilla de prueba,-n
para ejecutar una prueba específica por nombre,-v
para obtener una salida más detallada, y así sucesivamente. - Salida de prueba en color. Railties --------
Consulte el registro de cambios para obtener cambios detallados.
2.5 Eliminaciones
Se eliminó el soporte para el depurador, use byebug en su lugar.
debugger
no es compatible con Ruby 2.2. (commit)Se eliminaron las tareas
test:all
ytest:all:db
obsoletas. (commit)Se eliminó
Rails::Rack::LogTailer
obsoleto. (commit)Se eliminó la constante
RAILS_CACHE
obsoleta. (commit)Se eliminó la configuración obsoleta
serve_static_assets
. (commit)Se eliminaron las tareas de documentación
doc:app
,doc:rails
ydoc:guides
. (commit)Se eliminó el middleware
Rack::ContentLength
de la pila predeterminada. (Commit)
2.6 Obsolescencias
Se deprecó
config.static_cache_control
a favor deconfig.public_file_server.headers
. (Pull Request)Se deprecó
config.serve_static_files
a favor deconfig.public_file_server.enabled
. (Pull Request)Se deprecó las tareas en el espacio de nombres de tareas
rails
a favor del espacio de nombresapp
. (por ejemplo, las tareasrails:update
yrails:template
se renombraron aapp:update
yapp:template
.) (Pull Request)
2.7 Cambios destacados
Se agregó el ejecutador de pruebas de Rails
bin/rails test
. (Pull Request)Las aplicaciones y complementos recién generados obtienen un archivo
README.md
en formato Markdown. (commit, Pull Request)Se agregó la tarea
bin/rails restart
para reiniciar su aplicación de Rails tocandotmp/restart.txt
. (Pull Request)Se agregó la tarea
bin/rails initializers
para imprimir todos los inicializadores definidos en el orden en que son invocados por Rails. (Pull Request)Se agregó
bin/rails dev:cache
para habilitar o deshabilitar el almacenamiento en caché en el modo de desarrollo. (Pull Request)Se agregó el script
bin/update
para actualizar automáticamente el entorno de desarrollo. (Pull Request)Se realizaron tareas Rake a través de
bin/rails
. (Pull Request, Pull Request)Las nuevas aplicaciones se generan con el monitor de sistema de archivos basado en eventos habilitado en Linux y macOS. La función se puede omitir pasando
--skip-listen
al generador. (commit, commit)Generar aplicaciones con una opción para registrar en STDOUT en producción utilizando la variable de entorno
RAILS_LOG_TO_STDOUT
. (Pull Request)Habilitar HSTS con el encabezado IncludeSubdomains para nuevas aplicaciones. (Pull Request)
El generador de aplicaciones escribe un nuevo archivo
config/spring.rb
, que le indica a Spring que observe archivos comunes adicionales. (commit)Se agregó
--skip-action-mailer
para omitir Action Mailer al generar una nueva aplicación. (Pull Request)Se eliminó el directorio
tmp/sessions
y la tarea de borrado asociada. (Pull Request)Se cambió
_form.html.erb
generado por el generador de andamios para usar variables locales. (Pull Request)Se desactivó la carga automática de clases en el entorno de producción. (commit)
3 Action Pack
Consulte el registro de cambios para obtener cambios detallados.
3.1 Eliminaciones
Se eliminó
ActionDispatch::Request::Utils.deep_munge
. (commit)Se eliminó
ActionController::HideActions
. (Pull Request)Se eliminaron los métodos de marcador de posición
respond_to
yrespond_with
, esta funcionalidad se ha extraído a la gema responders. (commit)Se eliminaron los archivos de aserción obsoletos. (commit)
Se eliminó el uso obsoleto de claves de cadena en los ayudantes de URL. (commit)
Se eliminó la opción obsoleta
only_path
en los ayudantes*_path
. (commit)Se eliminó
NamedRouteCollection#helpers
obsoleto. (commit)Se eliminó el soporte obsoleto para definir rutas con la opción
:to
que no contiene#
. (commit)Se eliminó
ActionDispatch::Response#to_ary
obsoleto. (commit)Se eliminó
ActionDispatch::Request#deep_munge
obsoleto. (commit)Se eliminó
ActionDispatch::Http::Parameters#symbolized_path_parameters
obsoleto. (commit)Se eliminó la opción obsoleta
use_route
en las pruebas de controladores. (commit)Se eliminaron
assigns
yassert_template
. Ambos métodos se han extraído en la gema rails-controller-testing . (Pull Request)
3.2 Deprecaciones
Se deprecó todos los callbacks
*_filter
a favor de los callbacks*_action
. (Pull Request)Se deprecó los métodos de prueba de integración
*_via_redirect
. Usefollow_redirect!
manualmente después de la llamada de la solicitud para el mismo comportamiento. (Pull Request)Se deprecó
AbstractController#skip_action_callback
a favor de métodos individuales skip_callback. (Pull Request)Se deprecó la opción
:nothing
para el métodorender
. (Pull Request)Se deprecó pasar el primer parámetro como
Hash
y el código de estado predeterminado para el métodohead
. (Pull Request)Se deprecó el uso de cadenas o símbolos para los nombres de clase de middleware. Use nombres de clase en su lugar. (commit)
Se deprecó el acceso a los tipos MIME a través de constantes (por ejemplo,
Mime::HTML
). Use el operador de subíndice con un símbolo en su lugar (por ejemplo,Mime[:html]
). (Pull Request)Se deprecó
redirect_to :back
a favor deredirect_back
, que acepta un argumentofallback_location
requerido, eliminando así la posibilidad de unRedirectBackError
. (Pull Request)ActionDispatch::IntegrationTest
yActionController::TestCase
deprecian los argumentos posicionales a favor de argumentos de palabras clave. (Pull Request)Se deprecó los parámetros de ruta
:controller
y:action
. (Pull Request)Se deprecó el método env en las instancias de controlador. (commit)
ActionDispatch::ParamsParser
está obsoleto y se eliminó de la pila de middleware. Para configurar los analizadores de parámetros, useActionDispatch::Request.parameter_parsers=
. (commit, commit)
3.3 Cambios destacados
Se agregó
ActionController::Renderer
para renderizar plantillas arbitrarias fuera de las acciones del controlador. (Pull Request)Migración a la sintaxis de argumentos de palabras clave en
ActionController::TestCase
y métodos de solicitud HTTP deActionDispatch::Integration
. (Pull Request)Se agregó
http_cache_forever
a Action Controller, para que podamos almacenar en caché una respuesta que nunca caduca. (Pull Request)Proporcionar un acceso más amigable a las variantes de solicitud. (Pull Request)
Para acciones sin plantillas correspondientes, renderizar
head :no_content
en lugar de generar un error. (Pull Request)Se agregó la capacidad de anular el generador de formularios predeterminado para un controlador. (Pull Request)
Se agregó soporte para aplicaciones solo de API.
ActionController::API
se agrega como reemplazo deActionController::Base
para este tipo de aplicaciones. (Pull Request)ActionController::Parameters
ya no hereda deHashWithIndifferentAccess
. (Pull Request)Se facilita la opción de habilitar
config.force_ssl
yconfig.ssl_options
al hacerlos menos peligrosos de probar y más fáciles de deshabilitar. (Pull Request)Se agregó la capacidad de devolver encabezados arbitrarios a
ActionDispatch::Static
. (Pull Request)Se cambió el valor predeterminado de
protect_from_forgery
afalse
. (commit)ActionController::TestCase
se moverá a su propia gema en Rails 5.1. En su lugar, useActionDispatch::IntegrationTest
. (commit)Rails genera ETags débiles de forma predeterminada. (Pull Request)
Las acciones del controlador sin una llamada explícita a
render
y sin plantillas correspondientes renderizarán implícitamentehead :no_content
en lugar de generar un error. (Pull Request 1, 2)Se agregó una opción para tokens CSRF por formulario. (Pull Request)
Se agregó la codificación de solicitud y el análisis de respuesta a las pruebas de integración. (Pull Request)
Agregue
ActionController#helpers
para acceder al contexto de la vista a nivel de controlador. (Pull Request)Los mensajes flash descartados se eliminan antes de almacenarlos en la sesión. (Pull Request)
Se agregó soporte para pasar una colección de registros a
fresh_when
ystale?
. (Pull Request)ActionController::Live
se convirtió en unActiveSupport::Concern
. Esto significa que no se puede incluir en otros módulos sin extenderlos conActiveSupport::Concern
oActionController::Live
no tendrá efecto en producción. Algunas personas también pueden estar usando otro módulo para incluir algún código especial de manejo de fallas de autenticaciónWarden
/Devise
, ya que el middleware no puede capturar un:warden
lanzado por un hilo generado, que es el caso cuando se usaActionController::Live
. (Más detalles en este problema)Introducir
Response#strong_etag=
y#weak_etag=
y opciones análogas parafresh_when
ystale?
. (Pull Request)
4 Action View
Consulte el Changelog para obtener cambios detallados.
4.1 Eliminaciones
Se eliminó
AbstractController::Base::parent_prefixes
en desuso. (commit)Se eliminó
ActionView::Helpers::RecordTagHelper
, esta funcionalidad se ha extraído a la gema record_tag_helper. (Pull Request)Se eliminó la opción
:rescue_format
para el ayudantetranslate
ya que ya no es compatible con I18n. (Pull Request)
4.2 Cambios destacados
Se cambió el controlador de plantillas predeterminado de
ERB
aRaw
. (commit)La representación de colecciones puede almacenar en caché y recuperar múltiples parciales a la vez. (Pull Request, commit)
Se agregó la coincidencia de comodines a las dependencias explícitas. (Pull Request)
Hacer que
disable_with
sea el comportamiento predeterminado para las etiquetas de envío. Deshabilita el botón al enviar para evitar envíos duplicados. (Pull Request)El nombre de la plantilla parcial ya no tiene que ser un identificador válido de Ruby. (commit)
El ayudante
datetime_tag
ahora genera una etiqueta de entrada con el tipodatetime-local
. (Pull Request)Permitir bloques al renderizar con el ayudante
render partial:
. (Pull Request)
5 Action Mailer
Consulte el Changelog para obtener cambios detallados.
5.1 Eliminaciones
Se eliminaron los ayudantes
*_path
en desuso en las vistas de correo electrónico. (commit)Se eliminaron los métodos
deliver
ydeliver!
en desuso. (commit)
5.2 Cambios destacados
La búsqueda de plantillas ahora respeta el idioma predeterminado y las opciones de fallback de I18n. (commit)
Se agregó el sufijo
_mailer
a los mailers creados mediante el generador, siguiendo la misma convención de nomenclatura utilizada en los controladores y trabajos. (Pull Request)Agregado
assert_enqueued_emails
yassert_no_enqueued_emails
. (Pull Request)Agregada la configuración
config.action_mailer.deliver_later_queue_name
para establecer el nombre de la cola del mailer. (Pull Request)Agregado soporte para el fragment caching en las vistas de Action Mailer. Agregada la nueva opción de configuración
config.action_mailer.perform_caching
para determinar si las plantillas deben realizar caching o no. (Pull Request)
6 Active Record
Por favor, consulta el Changelog para obtener cambios detallados.
6.1 Eliminaciones
Eliminado el comportamiento obsoleto que permitía pasar matrices anidadas como valores de consulta. (Pull Request)
Eliminado
ActiveRecord::Tasks::DatabaseTasks#load_schema
, que estaba obsoleto. Este método fue reemplazado porActiveRecord::Tasks::DatabaseTasks#load_schema_for
. (commit)Eliminado
serialized_attributes
, que estaba obsoleto. (commit)Eliminado el contador automático obsoleto en
has_many :through
. (commit)Eliminado
sanitize_sql_hash_for_conditions
, que estaba obsoleto. (commit)Eliminado
Reflection#source_macro
, que estaba obsoleto. (commit)Eliminados
symbolized_base_class
ysymbolized_sti_name
, que estaban obsoletos. (commit)Eliminado
ActiveRecord::Base.disable_implicit_join_references=
, que estaba obsoleto. (commit)Eliminado el acceso obsoleto a la especificación de conexión utilizando un accessor de cadena. (commit)
Eliminado el soporte obsoleto para precargar asociaciones dependientes de la instancia. (commit)
Eliminado el soporte obsoleto para rangos de PostgreSQL con límites inferiores exclusivos. (commit)
Eliminada la deprecación al modificar una relación con Arel en caché. Esto ahora genera un error
ImmutableRelation
. (commit)Eliminado
ActiveRecord::Serialization::XmlSerializer
del núcleo. Esta funcionalidad se ha extraído al activemodel-serializers-xml gema. (Pull Request)Eliminado el soporte para el adaptador de base de datos
mysql
heredado del núcleo. La mayoría de los usuarios deberían poder usarmysql2
. Se convertirá en una gema separada cuando encontremos a alguien que lo mantenga. (Pull Request 1, Pull Request 2)Eliminado el soporte para la gema
protected_attributes
. (commit)Eliminado el soporte para versiones de PostgreSQL anteriores a 9.1. (Pull Request)
Eliminado el soporte para la gema
activerecord-deprecated_finders
. (commit)Eliminada la constante
ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES
. (commit)
6.2 Deprecaciones
Deprecado pasar una clase como valor en una consulta. Los usuarios deben pasar cadenas en su lugar. (Pull Request)
Deprecado devolver
false
como forma de detener las cadenas de callback de Active Record. La forma recomendada es usarthrow(:abort)
. (Pull Request)Deprecado
ActiveRecord::Base.errors_in_transactional_callbacks=
. (commit)Deprecado el uso de
Relation#uniq
, usarRelation#distinct
en su lugar. (commit)Deprecado el tipo PostgreSQL
:point
a favor de uno nuevo que devolverá objetosPoint
en lugar de unArray
. (Pull Request)Deprecado recargar la asociación forzando un argumento verdadero al método de asociación. (Pull Request)
Deprecados los nombres de clave para los errores de
restrict_dependent_destroy
de la asociación en favor de nuevos nombres de clave. (Pull Request)Sincronizado el comportamiento de
#tables
. (Pull Request)Deprecado
SchemaCache#tables
,SchemaCache#table_exists?
ySchemaCache#clear_table_cache!
en favor de sus contrapartes de origen de datos. (Pull Request)Deprecado
connection.tables
en los adaptadores SQLite3 y MySQL. (Pull Request)Deprecado pasar argumentos a
#tables
- el método#tables
de algunos adaptadores (mysql2, sqlite3) devolvería tanto tablas como vistas, mientras que otros (postgresql) solo devuelven tablas. Para hacer que su comportamiento sea consistente,#tables
solo devolverá tablas en el futuro. (Pull Request)Obsoleto
table_exists?
- El método#table_exists?
verificaba tanto las tablas como las vistas. Para que su comportamiento sea consistente con#tables
, en el futuro#table_exists?
solo verificará las tablas. (Pull Request)Obsoleto el envío del argumento
offset
afind_nth
. Por favor, use el métodooffset
en la relación en su lugar. (Pull Request)Obsoletos
{insert|update|delete}_sql
enDatabaseStatements
. Use los métodos públicos{insert|update|delete}
en su lugar. (Pull Request)Obsoleto
use_transactional_fixtures
en favor deuse_transactional_tests
para mayor claridad. (Pull Request)Obsoleto pasar una columna a
ActiveRecord::Connection#quote
. (commit)Se agregó una opción
end
afind_in_batches
que complementa el parámetrostart
para especificar dónde detener el procesamiento por lotes. (Pull Request)
6.3 Cambios destacados
Se agregó la opción
foreign_key
areferences
al crear la tabla. (commit)Nueva API de atributos. (commit)
Se agregó la opción
:_prefix
/:_suffix
a la definición deenum
. (Pull Request, Pull Request)Se agregó
#cache_key
aActiveRecord::Relation
. (Pull Request)Se cambió el valor predeterminado de
null
paratimestamps
afalse
. (commit)Se agregó
ActiveRecord::SecureToken
para encapsular la generación de tokens únicos para atributos en un modelo usandoSecureRandom
. (Pull Request)Se agregó la opción
:if_exists
paradrop_table
. (Pull Request)Se agregó
ActiveRecord::Base#accessed_fields
, que se puede usar para descubrir rápidamente qué campos se leyeron de un modelo cuando se busca seleccionar solo los datos necesarios de la base de datos. (commit)Se agregó el método
#or
aActiveRecord::Relation
, que permite usar el operador OR para combinar cláusulas WHERE o HAVING. (commit)Se agregó
ActiveRecord::Base.suppress
para evitar que el receptor se guarde durante el bloque dado. (Pull Request)belongs_to
ahora generará un error de validación de forma predeterminada si la asociación no está presente. Puede desactivar esto por asociación conoptional: true
. También se deprecia la opciónrequired
en favor deoptional
parabelongs_to
. (Pull Request)Se agregó
config.active_record.dump_schemas
para configurar el comportamiento dedb:structure:dump
. (Pull Request)Se agregó la opción
config.active_record.warn_on_records_fetched_greater_than
. (Pull Request)Se agregó soporte nativo para el tipo de datos JSON en MySQL. (Pull Request)
Se agregó soporte para eliminar índices concurrentemente en PostgreSQL. (Pull Request)
Se agregaron los métodos
#views
y#view_exists?
en los adaptadores de conexión. (Pull Request)Se agregó
ActiveRecord::Base.ignored_columns
para hacer que algunas columnas sean invisibles para Active Record. (Pull Request)Se agregaron los métodos
connection.data_sources
yconnection.data_source_exists?
. Estos métodos determinan qué relaciones se pueden utilizar para respaldar los modelos de Active Record (generalmente tablas y vistas). (Pull Request)Los archivos de fixtures ahora pueden establecer la clase del modelo en el propio archivo YAML. (Pull Request)
Se agregó la capacidad de utilizar
uuid
como clave primaria de forma predeterminada al generar migraciones de base de datos. (Pull Request)Agregado
ActiveRecord::Relation#left_joins
yActiveRecord::Relation#left_outer_joins
. (Pull Request)Agregados callbacks
after_{create,update,delete}_commit
. (Pull Request)Versionado de la API presentada a las clases de migración, para poder cambiar los valores predeterminados de los parámetros sin romper las migraciones existentes, ni forzar a que sean reescritas a través de un ciclo de deprecación. (Pull Request)
ApplicationRecord
es una nueva superclase para todos los modelos de la aplicación, análoga a los controladores de la aplicación que heredan deApplicationController
en lugar deActionController::Base
. Esto proporciona a las aplicaciones un único lugar para configurar el comportamiento de los modelos en toda la aplicación. (Pull Request)Agregados los métodos
#second_to_last
y#third_to_last
a ActiveRecord. (Pull Request)Agregada la capacidad de anotar objetos de la base de datos (tablas, columnas, índices) con comentarios almacenados en los metadatos de la base de datos para PostgreSQL y MySQL. (Pull Request)
Agregado soporte para prepared statements en el adaptador
mysql2
, para mysql2 0.4.4+. Anteriormente, esto solo era compatible con el adaptador heredadomysql
en desuso. Para habilitarlo, establezcaprepared_statements: true
enconfig/database.yml
. (Pull Request)Agregada la capacidad de llamar al método
ActionRecord::Relation#update
en objetos de relación, lo que ejecutará validaciones y callbacks en todos los objetos de la relación. (Pull Request)Agregada la opción
:touch
al métodosave
para que los registros se puedan guardar sin actualizar las marcas de tiempo. (Pull Request)Agregado soporte para índices de expresiones y clases de operadores en PostgreSQL. (commit)
Agregada la opción
:index_errors
para agregar índices a los errores de atributos anidados. (Pull Request)Agregado soporte para dependencias de eliminación bidireccionales. (Pull Request)
Agregado soporte para callbacks
after_commit
en pruebas transaccionales. (Pull Request)Agregado el método
foreign_key_exists?
para verificar si una clave foránea existe en una tabla o no. (Pull Request)Agregada la opción
:time
al métodotouch
para tocar registros con una hora diferente a la hora actual. (Pull Request)Cambiados los callbacks de transacción para no ocultar errores. Antes de este cambio, cualquier error generado dentro de un callback de transacción era rescatado e impreso en los registros, a menos que se usara la opción (recién deprecada)
raise_in_transactional_callbacks = true
. Ahora, estos errores ya no son rescatados y simplemente se propagan, coincidiendo con el comportamiento de otros callbacks. (commit)
7 Active Model
Consulte el Changelog para obtener cambios detallados.
7.1 Eliminaciones
Eliminados los métodos obsoletos
ActiveModel::Dirty#reset_#{attribute}
yActiveModel::Dirty#reset_changes
. (Pull Request)Eliminada la serialización XML. Esta característica se ha extraído a la gema activemodel-serializers-xml. (Pull Request)
Eliminado el módulo
ActionController::ModelNaming
. (Pull Request)
7.2 Deprecaciones
Deprecado el retorno de
false
como forma de detener las cadenas de callbacks de Active Model yActiveModel::Validations
. La forma recomendada es usarthrow(:abort)
. (Pull Request)Deprecados los métodos
ActiveModel::Errors#get
,ActiveModel::Errors#set
yActiveModel::Errors#[]=
que tienen un comportamiento inconsistente. (Pull Request)Deprecada la opción
:tokenizer
paravalidates_length_of
, a favor de Ruby puro. (Pull Request)Se ha eliminado
ActiveModel::Errors#add_on_empty
yActiveModel::Errors#add_on_blank
sin reemplazo. (Pull Request)
7.3 Cambios destacados
Se ha agregado
ActiveModel::Errors#details
para determinar qué validador ha fallado. (Pull Request)Se ha extraído
ActiveRecord::AttributeAssignment
aActiveModel::AttributeAssignment
permitiendo su uso para cualquier objeto como un módulo incluible. (Pull Request)Se han agregado
ActiveModel::Dirty#[attr_name]_previously_changed?
yActiveModel::Dirty#[attr_name]_previous_change
para mejorar el acceso a los cambios registrados después de que el modelo ha sido guardado. (Pull Request)Se validan múltiples contextos en
valid?
einvalid?
a la vez. (Pull Request)Se ha cambiado
validates_acceptance_of
para aceptartrue
como valor predeterminado además de1
. (Pull Request)
8 Active Job
Consulte el registro de cambios para obtener cambios detallados.
8.1 Cambios destacados
ActiveJob::Base.deserialize
delega a la clase de trabajo. Esto permite que los trabajos adjunten metadatos arbitrarios cuando se serializan y los lean cuando se realizan. (Pull Request)Se agrega la capacidad de configurar el adaptador de cola en cada trabajo sin afectar a los demás. (Pull Request)
Ahora, un trabajo generado hereda de
app/jobs/application_job.rb
de forma predeterminada. (Pull Request)Se permite que
DelayedJob
,Sidekiq
,qu
,que
yqueue_classic
informen el ID del trabajo aActiveJob::Base
comoprovider_job_id
. (Pull Request, Pull Request, commit)Se implementa un procesador de
AsyncJob
simple y unAsyncAdapter
asociado que encola trabajos en un grupo de hilos deconcurrent-ruby
. (Pull Request)Se cambia el adaptador predeterminado de en línea a asíncrono. Es una mejor opción ya que las pruebas no dependerán erróneamente de un comportamiento que ocurre de forma sincrónica. (commit)
9 Active Support
Consulte el registro de cambios para obtener cambios detallados.
9.1 Eliminaciones
Se ha eliminado
ActiveSupport::JSON::Encoding::CircularReferenceError
obsoleto. (commit)Se han eliminado los métodos obsoletos
ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=
yActiveSupport::JSON::Encoding.encode_big_decimal_as_string
. (commit)Se ha eliminado
ActiveSupport::SafeBuffer#prepend
obsoleto. (commit)Se han eliminado los métodos obsoletos de
Kernel
.silence_stderr
,silence_stream
,capture
yquietly
. (commit)Se ha eliminado el archivo obsoleto
active_support/core_ext/big_decimal/yaml_conversions
. (commit)Se han eliminado los métodos obsoletos
ActiveSupport::Cache::Store.instrument
yActiveSupport::Cache::Store.instrument=
. (commit)Se ha eliminado
Class#superclass_delegating_accessor
obsoleto. UseClass#class_attribute
en su lugar. (Pull Request)Se ha eliminado
ThreadSafe::Cache
. UseConcurrent::Map
en su lugar. (Pull Request)Se ha eliminado
Object#itself
ya que está implementado en Ruby 2.2. (Pull Request)
9.2 Deprecaciones
Se ha deprecado
MissingSourceFile
a favor deLoadError
. (commit)Se ha deprecado
alias_method_chain
en favor deModule#prepend
introducido en Ruby 2.0. (Pull Request)Se ha deprecado
ActiveSupport::Concurrency::Latch
a favor deConcurrent::CountDownLatch
de concurrent-ruby. (Pull Request)Se ha deprecado la opción
:prefix
denumber_to_human_size
sin reemplazo. (Pull Request)Se ha deprecado
Module#qualified_const_
en favor de los métodos integradosModule#const_
. (Pull Request)Se ha deprecado pasar una cadena para definir un callback. (Pull Request)
Se ha deprecado
ActiveSupport::Cache::Store#namespaced_key
,ActiveSupport::Cache::MemCachedStore#escape_key
yActiveSupport::Cache::FileStore#key_file_path
. Usenormalize_key
en su lugar. (Pull Request, commit)Se ha deprecado
ActiveSupport::Cache::LocaleCache#set_cache_value
a favor dewrite_cache_value
. (Pull Request)Se ha dejado de recomendar pasar argumentos a
assert_nothing_raised
. (Pull Request)Se ha dejado de recomendar
Module.local_constants
en favor deModule.constants(false)
. (Pull Request)
9.3 Cambios destacados
Se han agregado los métodos
#verified
y#valid_message?
aActiveSupport::MessageVerifier
. (Pull Request)Se ha cambiado la forma en que se pueden detener las cadenas de callbacks. El método preferido para detener una cadena de callbacks a partir de ahora es lanzar explícitamente
throw(:abort)
. (Pull Request)Nueva opción de configuración
config.active_support.halt_callback_chains_on_return_false
para especificar si las cadenas de callbacks de ActiveRecord, ActiveModel y ActiveModel::Validations pueden detenerse al devolverfalse
en un callback 'before'. (Pull Request)Se ha cambiado el orden de prueba predeterminado de
:sorted
a:random
. (commit)Se han agregado los métodos
#on_weekend?
,#on_weekday?
,#next_weekday
,#prev_weekday
aDate
,Time
yDateTime
. (Pull Request, Pull Request)Se ha agregado la opción
same_time
a#next_week
y#prev_week
paraDate
,Time
, yDateTime
. (Pull Request)Se han agregado los métodos
#prev_day
y#next_day
como contrapartes de#yesterday
y#tomorrow
paraDate
,Time
yDateTime
. (Pull Request)Se ha agregado
SecureRandom.base58
para generar cadenas aleatorias en base58. (commit)Se ha agregado
file_fixture
aActiveSupport::TestCase
. Proporciona un mecanismo sencillo para acceder a archivos de muestra en tus casos de prueba. (Pull Request)Se ha agregado
#without
aEnumerable
yArray
para devolver una copia de un enumerable sin los elementos especificados. (Pull Request)Se ha agregado
ActiveSupport::ArrayInquirer
yArray#inquiry
. (Pull Request)Se ha agregado
ActiveSupport::TimeZone#strptime
para permitir el análisis de horas como si fueran de una zona horaria dada. (commit)Se han agregado los métodos de consulta
Integer#positive?
yInteger#negative?
en la línea deInteger#zero?
. (commit)Se ha agregado una versión con exclamación a los métodos de obtención de
ActiveSupport::OrderedOptions
que lanzará unKeyError
si el valor es.blank?
. (Pull Request)Se ha agregado
Time.days_in_year
para devolver el número de días en el año dado, o el año actual si no se proporciona ningún argumento. (commit)Se ha agregado un observador de archivos con eventos para detectar de forma asíncrona cambios en el código fuente de la aplicación, rutas, locales, etc. (Pull Request)
Se han agregado los métodos
thread_m/cattr_accessor/reader/writer
para declarar variables de clase y módulo que viven por hilo. (Pull Request)Se han agregado los métodos
Array#second_to_last
yArray#third_to_last
. (Pull Request)Se han publicado las APIs
ActiveSupport::Executor
yActiveSupport::Reloader
para permitir que componentes y bibliotecas administren y participen en la ejecución de código de aplicación y el proceso de recarga de la aplicación. (Pull Request)ActiveSupport::Duration
ahora admite el formato y análisis ISO8601. (Pull Request)ActiveSupport::JSON.decode
ahora admite el análisis de horas locales ISO8601 cuandoparse_json_times
está habilitado. (Pull Request)ActiveSupport::JSON.decode
ahora devuelve objetosDate
para cadenas de fecha. (Pull Request)Se ha agregado la capacidad de
TaggedLogging
para permitir que los registradores se instancien múltiples veces para que no compartan etiquetas entre sí. (Pull Request)Créditos
Consulte la lista completa de colaboradores de Rails para conocer a las muchas personas que dedicaron muchas horas para 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.