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

Ruby on Rails 4.2 Notas de la Versión

Aspectos destacados en Rails 4.2:

Estas notas de la versión solo cubren los cambios principales. Para conocer otras características, correcciones de errores y cambios, consulte los registros de cambios o revise la lista de commits en el repositorio principal de Rails en GitHub.

1 Actualizando a Rails 4.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 4.1 en caso de que no lo haya hecho y asegurarse de que su aplicación siga funcionando como se espera antes de intentar actualizar a Rails 4.2. Una lista de cosas a tener en cuenta al actualizar está disponible en la guía Actualizando Ruby on Rails.

2 Características Principales

2.1 Active Job

Active Job es un nuevo framework en Rails 4.2. Es una interfaz común sobre los sistemas de encolamiento como Resque, Delayed Job, Sidekiq y más.

Los trabajos escritos con la API de Active Job se ejecutan en cualquiera de las colas compatibles gracias a sus adaptadores respectivos. Active Job viene preconfigurado con un ejecutor en línea que ejecuta los trabajos de inmediato.

A menudo, los trabajos necesitan tomar objetos de Active Record como argumentos. Active Job pasa referencias de objetos como URIs (identificadores uniformes de recursos) en lugar de serializar el objeto en sí. La nueva biblioteca Global ID construye URIs y busca los objetos a los que hacen referencia. Pasar objetos de Active Record como argumentos de trabajo funciona simplemente utilizando Global ID internamente.

Por ejemplo, si trashable es un objeto de Active Record, entonces este trabajo se ejecuta sin problemas sin necesidad de serialización:

class TrashableCleanupJob < ActiveJob::Base
  def perform(trashable, depth)
    trashable.cleanup(depth)
  end
end

Consulte la guía Conceptos Básicos de Active Job para obtener más información.

2.2 Correos Asíncronos

Basándose en Active Job, Action Mailer ahora viene con un método deliver_later que envía correos electrónicos a través de la cola, por lo que no bloquea el controlador o el modelo si la cola es asíncrona (la cola en línea predeterminada bloquea).

Todavía es posible enviar correos electrónicos de inmediato con deliver_now.

2.3 Adequate Record

Adequate Record es un conjunto de mejoras de rendimiento en Active Record que hace que las llamadas comunes de find y find_by y algunas consultas de asociación sean hasta 2 veces más rápidas.

Funciona almacenando en caché las consultas SQL comunes como declaraciones preparadas y reutilizándolas en llamadas similares, omitiendo la mayor parte del trabajo de generación de consultas en llamadas posteriores. Para obtener más detalles, consulte la publicación del blog de Aaron Patterson (en inglés).

Active Record aprovechará automáticamente esta función en operaciones compatibles sin ninguna participación del usuario ni cambios en el código. Aquí hay algunos ejemplos de operaciones compatibles:

Post.find(1)  # La primera llamada genera y almacena en caché la declaración preparada
Post.find(2)  # Las llamadas posteriores reutilizan la declaración preparada en caché

Post.find_by_title('primer post')
Post.find_by_title('segundo post')

Post.find_by(title: 'primer post')
Post.find_by(title: 'segundo post')

post.comments
post.comments(true)

Es importante destacar que, como sugieren los ejemplos anteriores, las declaraciones preparadas no almacenan en caché los valores pasados en las llamadas de método; en su lugar, tienen marcadores de posición para ellos.

La caché no se utiliza en los siguientes escenarios:

  • El modelo tiene un ámbito predeterminado
  • El modelo utiliza herencia de tabla única
  • find con una lista de ids, por ejemplo:

    # no se almacena en caché
    Post.find(1, 2, 3)
    Post.find([1,2])
    
  • find_by con fragmentos de SQL:

    Post.find_by('published_at < ?', 2.semanas.ago)
    

2.4 Web Console

Las nuevas aplicaciones generadas con Rails 4.2 ahora vienen con la gema Web Console de forma predeterminada. Web Console agrega una consola interactiva de Ruby en cada página de error y proporciona una vista y ayudantes de controlador console.

La consola interactiva en las páginas de error le permite ejecutar código en el contexto del lugar donde se originó la excepción. El ayudante console, si se llama en cualquier vista o controlador, inicia una consola interactiva con el contexto final, una vez que se haya completado la representación.

2.5 Soporte para claves foráneas

El DSL de migración ahora admite agregar y eliminar claves foráneas. También se incluyen en schema.rb. En este momento, solo los adaptadores mysql, mysql2 y postgresql admiten claves foráneas.

# agregar una clave foránea a `articles.author_id` que referencia `authors.id`
add_foreign_key :articles, :authors

# agregar una clave foránea a `articles.author_id` que referencia `users.lng_id`
add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"

# eliminar la clave foránea en `accounts.branch_id`
remove_foreign_key :accounts, :branches

# eliminar la clave foránea en `accounts.owner_id`
remove_foreign_key :accounts, column: :owner_id

Consulte la documentación de la API en add_foreign_key y remove_foreign_key para obtener una descripción completa.

3 Incompatibilidades

Se ha eliminado la funcionalidad previamente deprecada. Consulte los componentes individuales para conocer las nuevas deprecaciones en esta versión.

Los siguientes cambios pueden requerir una acción inmediata al actualizar.

3.1 render con un argumento de tipo String

Anteriormente, llamar a render "foo/bar" en una acción del controlador era equivalente a render file: "foo/bar". En Rails 4.2, esto ha cambiado para significar render template: "foo/bar". Si necesita renderizar un archivo, cambie su código para usar la forma explícita (render file: "foo/bar") en su lugar.

3.2 respond_with / respond_to a nivel de clase

respond_with y el correspondiente respond_to a nivel de clase se han movido al gem responders. Agregue gem 'responders', '~> 2.0' a su Gemfile para usarlo:

# app/controllers/users_controller.rb

class UsersController < ApplicationController
  respond_to :html, :json

  def show
    @user = User.find(params[:id])
    respond_with @user
  end
end

El respond_to a nivel de instancia no se ve afectado:

# app/controllers/users_controller.rb

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.html
      format.json { render json: @user }
    end
  end
end

3.3 Host predeterminado para rails server

Debido a un cambio en Rack, rails server ahora escucha en localhost en lugar de 0.0.0.0 de forma predeterminada. Esto debería tener un impacto mínimo en el flujo de trabajo de desarrollo estándar, ya que tanto http://127.0.0.1:3000 como http://localhost:3000 seguirán funcionando como antes en su propia máquina.

Sin embargo, con este cambio ya no podrá acceder al servidor de Rails desde una máquina diferente, por ejemplo, si su entorno de desarrollo está en una máquina virtual y desea acceder a ella desde la máquina host. En estos casos, inicie el servidor con rails server -b 0.0.0.0 para restaurar el comportamiento anterior.

Si hace esto, asegúrese de configurar correctamente su firewall para que solo las máquinas confiables en su red puedan acceder a su servidor de desarrollo.

3.4 Cambio en los símbolos de opción de estado para render

Debido a un cambio en Rack, los símbolos que el método render acepta para la opción :status han cambiado:

  • 306: se ha eliminado :reserved.
  • 413: :request_entity_too_large se ha cambiado a :payload_too_large.
  • 414: :request_uri_too_long se ha cambiado a :uri_too_long.
  • 416: :requested_range_not_satisfiable se ha cambiado a :range_not_satisfiable.

Tenga en cuenta que si llama a render con un símbolo desconocido, el estado de respuesta será 500 de forma predeterminada.

3.5 Sanitizador de HTML

El sanitizador de HTML se ha reemplazado por una nueva implementación más robusta basada en Loofah y Nokogiri. El nuevo sanitizador es más seguro y su sanitización es más potente y flexible.

Debido al nuevo algoritmo, la salida sanitizada puede ser diferente para ciertas entradas patológicas.

Si tiene una necesidad particular de la salida exacta del antiguo sanitizador, puede agregar el gem rails-deprecated_sanitizer a su Gemfile para tener el comportamiento antiguo. El gem no emite advertencias de deprecación porque es opcional.

rails-deprecated_sanitizer será compatible solo con Rails 4.2; no se mantendrá para Rails 5.0.

Consulte esta publicación de blog para obtener más detalles sobre los cambios en el nuevo sanitizador.

3.6 assert_select

assert_select ahora se basa en Nokogiri. Como resultado, algunos selectores que antes eran válidos ahora no son compatibles. Si su aplicación está utilizando alguna de estas formas de escritura, deberá actualizarlas: * Los valores en los selectores de atributos pueden necesitar comillas si contienen caracteres no alfanuméricos.

```ruby
# antes
a[href=/]
a[href$=/]

# ahora
a[href="/"]
a[href$="/"]
```
  • Los DOM construidos a partir de código fuente HTML que contiene HTML inválido con elementos anidados incorrectamente pueden diferir.

    Por ejemplo:

    # contenido: <div><i><p></i></div>
    
    # antes:
    assert_select('div > i')  # => true
    assert_select('div > p')  # => false
    assert_select('i > p')    # => true
    
    # ahora:
    assert_select('div > i')  # => true
    assert_select('div > p')  # => true
    assert_select('i > p')    # => false
    
  • Si los datos seleccionados contienen entidades, el valor seleccionado para la comparación solía ser sin procesar (por ejemplo, AT&amp;T), y ahora se evalúa (por ejemplo, AT&T).

    # contenido: <p>AT&amp;T</p>
    
    # antes:
    assert_select('p', 'AT&amp;T')  # => true
    assert_select('p', 'AT&T')      # => false
    
    # ahora:
    assert_select('p', 'AT&T')      # => true
    assert_select('p', 'AT&amp;T')  # => false
    

Además, las sustituciones han cambiado de sintaxis.

Ahora tienes que usar un selector :match similar a CSS:

assert_select ":match('id', ?)", 'comment_1'

Además, las sustituciones de expresiones regulares se ven diferentes cuando la afirmación falla. Observa cómo /hello/ aquí:

assert_select(":match('id', ?)", /hello/)

se convierte en "(?-mix:hello)":

Se esperaba encontrar al menos 1 elemento que coincida con "div:match('id', "(?-mix:hello)")", se encontraron 0.
Se esperaba que 0 fuera >= 1.

Consulta la documentación de Rails Dom Testing para obtener más información sobre assert_select.

4 Railties

Consulta el Changelog para obtener cambios detallados.

4.1 Eliminaciones

  • La opción --skip-action-view se ha eliminado del generador de aplicaciones. (Pull Request)

  • El comando rails application se ha eliminado sin reemplazo. (Pull Request)

4.2 Deprecaciones

  • Se ha deprecado la falta de config.log_level para entornos de producción. (Pull Request)

  • Se ha deprecado rake test:all a favor de rake test, ya que ahora ejecuta todas las pruebas en la carpeta test. (Pull Request)

  • Se ha deprecado rake test:all:db a favor de rake test:db. (Pull Request)

  • Se ha deprecado Rails::Rack::LogTailer sin reemplazo. (Commit)

4.3 Cambios destacados

  • Se introdujo web-console en el archivo Gemfile de la aplicación por defecto. (Pull Request)

  • Se agregó una opción required al generador de modelos para asociaciones. (Pull Request)

  • Se introdujo el espacio de nombres x para definir opciones de configuración personalizadas:

    # config/environments/production.rb
    config.x.payment_processing.schedule = :daily
    config.x.payment_processing.retries  = 3
    config.x.super_debugger              = true
    

    Estas opciones están disponibles a través del objeto de configuración:

    Rails.configuration.x.payment_processing.schedule # => :daily
    Rails.configuration.x.payment_processing.retries  # => 3
    Rails.configuration.x.super_debugger              # => true
    

    (Commit)

  • Se introdujo Rails::Application.config_for para cargar una configuración para el entorno actual.

    # config/exception_notification.yml
    production:
      url: http://127.0.0.1:8080
      namespace: my_app_production
    development:
      url: http://localhost:3001
      namespace: my_app_development
    
    # config/environments/production.rb
    Rails.application.configure do
      config.middleware.use ExceptionNotifier, config_for(:exception_notification)
    end
    

    (Pull Request)

  • Se introdujo la opción --skip-turbolinks en el generador de aplicaciones para no generar la integración de turbolinks. (Commit)

  • Se introdujo el script bin/setup como una convención para el código de configuración automatizado al iniciar una aplicación. (Pull Request)

  • Se cambió el valor predeterminado de config.assets.digest a true en desarrollo. (Pull Request)

  • Se introdujo una API para registrar nuevas extensiones para rake notes. (Pull Request)

  • Se introdujo un callback after_bundle para usar en plantillas de Rails. (Pull Request)

  • Se introdujo Rails.gem_version como un método de conveniencia para devolver Gem::Version.new(Rails.version). (Pull Request)

5 Action Pack

Consulta el Changelog para obtener cambios detallados.

5.1 Eliminaciones

  • respond_with y respond_to a nivel de clase se han eliminado de Rails y se han movido a la gema responders (versión 2.0). Agrega gem 'responders', '~> 2.0' a tu Gemfile para seguir utilizando estas características. (Pull Request, Más detalles)

  • Se eliminó AbstractController::Helpers::ClassMethods::MissingHelperError en desuso a favor de AbstractController::Helpers::MissingHelperError. (Commit)

5.2 Deprecaciones

  • Se ha deprecado la opción only_path en los ayudantes *_path. (Commit)

  • Se ha deprecado assert_tag, assert_no_tag, find_tag y find_all_tag en favor de assert_select. (Commit)

  • Se ha deprecado el soporte para establecer la opción :to de un enrutador como un símbolo o una cadena que no contiene el carácter "#":

    get '/posts', to: MyRackApp    => (No es necesario cambiar)
    get '/posts', to: 'post#index' => (No es necesario cambiar)
    get '/posts', to: 'posts'      => get '/posts', controller: :posts
    get '/posts', to: :index       => get '/posts', action: :index
    

    (Commit)

  • Se ha deprecado el soporte para claves de cadena en los ayudantes de URL:

    # malo
    root_path('controller' => 'posts', 'action' => 'index')
    
    # bueno
    root_path(controller: 'posts', action: 'index')
    

    (Pull Request)

5.3 Cambios destacados

  • Se han eliminado los métodos de la familia *_filter de la documentación. Se desaconseja su uso a favor de los métodos de la familia *_action:

    after_filter          => after_action
    append_after_filter   => append_after_action
    append_around_filter  => append_around_action
    append_before_filter  => append_before_action
    around_filter         => around_action
    before_filter         => before_action
    prepend_after_filter  => prepend_after_action
    prepend_around_filter => prepend_around_action
    prepend_before_filter => prepend_before_action
    skip_after_filter     => skip_after_action
    skip_around_filter    => skip_around_action
    skip_before_filter    => skip_before_action
    skip_filter           => skip_action_callback
    

    Si tu aplicación depende actualmente de estos métodos, debes usar los métodos de reemplazo *_action en su lugar. Estos métodos serán deprecados en el futuro y eventualmente serán eliminados de Rails.

    (Commit 1, 2)

  • render nothing: true o renderizar un cuerpo nil ya no añade un espacio en blanco al cuerpo de la respuesta. (Pull Request)

  • Rails ahora incluye automáticamente el hash del template en las ETags. (Pull Request)

  • Los segmentos que se pasan a los ayudantes de URL ahora se escapan automáticamente. (Commit)

  • Se introdujo la opción always_permitted_parameters para configurar qué parámetros están permitidos globalmente. El valor predeterminado de esta configuración es ['controller', 'action']. (Pull Request)

  • Se agregó el método HTTP MKCALENDAR de RFC 4791. (Pull Request)

  • Las notificaciones *_fragment.action_controller ahora incluyen el nombre del controlador y la acción en la carga útil. (Pull Request)

  • Se mejoró la página de error de enrutamiento con una búsqueda difusa de rutas. (Pull Request)

  • Se agregó una opción para deshabilitar el registro de fallos de CSRF. (Pull Request)

  • Cuando el servidor de Rails está configurado para servir activos estáticos, los activos gzip ahora se sirven si el cliente lo admite y hay un archivo gzip pregenerado (.gz) en el disco. Por defecto, el pipeline de activos genera archivos .gz para todos los activos compresibles. Servir archivos gzip minimiza la transferencia de datos y acelera las solicitudes de activos. Siempre usa un CDN si estás sirviendo activos desde tu servidor de Rails en producción. (Pull Request)

  • Al llamar a los ayudantes process en una prueba de integración, la ruta debe tener una barra diagonal inicial. Anteriormente se podía omitir, pero eso era un subproducto de la implementación y no una característica intencional, por ejemplo:

    test "list all posts" do
      get "/posts"
      assert_response :success
    end
    

6 Action View

Consulta el Changelog para ver los cambios detallados.

6.1 Deprecaciones

  • Se ha deprecado AbstractController::Base.parent_prefixes. Sobrescribe AbstractController::Base.local_prefixes cuando quieras cambiar dónde encontrar las vistas. (Pull Request)

  • Se ha deprecado ActionView::Digestor#digest(name, format, finder, options = {}). Los argumentos deben pasarse como un hash en su lugar. (Pull Request)

6.2 Cambios destacados

  • render "foo/bar" ahora se expande a render template: "foo/bar" en lugar de render file: "foo/bar". (Pull Request)

  • Los ayudantes de formulario ya no generan un elemento <div> con CSS en línea alrededor de los campos ocultos. (Pull Request)

  • Se introdujo una variable local especial #{partial_name}_iteration para usar con parciales que se renderizan con una colección. Proporciona acceso al estado actual de la iteración a través de los métodos index, size, first? y last?. (Pull Request)

  • La traducción de marcadores de posición sigue la misma convención que la traducción de label. (Pull Request)

7 Action Mailer

Consulta el Changelog para ver los cambios detallados.

7.1 Deprecaciones

  • Se han deprecado los ayudantes *_path en los mailers. Siempre usa los ayudantes *_url en su lugar. (Pull Request)

  • Se han deprecado deliver / deliver! a favor de deliver_now / deliver_now!. (Pull Request)

7.2 Cambios destacados

  • link_to y url_for generan URLs absolutas de forma predeterminada en las plantillas, ya no es necesario pasar only_path: false. (Commit)

  • Se introdujo deliver_later que encola un trabajo en la cola de la aplicación para enviar correos electrónicos de forma asíncrona. (Pull Request)

  • Se agregó la opción de configuración show_previews para habilitar las vistas previas de mailers fuera del entorno de desarrollo. (Pull Request)

    Active Record

Consulte el registro de cambios para obtener cambios detallados.

7.3 Eliminaciones

  • Se eliminó cache_attributes y amigos. Todos los atributos están en caché. (Pull Request)

  • Se eliminó el método obsoleto ActiveRecord::Base.quoted_locking_column. (Pull Request)

  • Se eliminó ActiveRecord::Migrator.proper_table_name obsoleto. En su lugar, use el método de instancia proper_table_name en ActiveRecord::Migration. (Pull Request)

  • Se eliminó el tipo :timestamp no utilizado. Se le asigna automáticamente el alias :datetime en todos los casos. Soluciona inconsistencias cuando los tipos de columna se envían fuera de Active Record, como para la serialización XML. (Pull Request)

7.4 Obsolescencias

  • Se obsoletó la supresión de errores dentro de after_commit y after_rollback. (Pull Request)

  • Se obsoletó el soporte defectuoso para la detección automática de cachés de contador en asociaciones has_many :through. En su lugar, debe especificar manualmente la caché de contador en las asociaciones has_many y belongs_to para los registros a través de. (Pull Request)

  • Se obsoletó pasar objetos de Active Record a .find o .exists?. Llame primero a id en los objetos. (Commit 1, 2)

  • Se obsoletó el soporte a medias para valores de rango de PostgreSQL con comienzos excluidos. Actualmente mapeamos los rangos de PostgreSQL a rangos de Ruby. Esta conversión no es completamente posible porque los rangos de Ruby no admiten comienzos excluidos.

    La solución actual de incrementar el comienzo no es correcta y ahora está obsoleta. Para subtipos donde no sabemos cómo incrementar (por ejemplo, succ no está definido), generará un ArgumentError para rangos con comienzos excluidos. (Commit)

  • Se obsoletó llamar a DatabaseTasks.load_schema sin una conexión. Use DatabaseTasks.load_schema_current en su lugar. (Commit)

  • Se obsoletó sanitize_sql_hash_for_conditions sin reemplazo. Usar un Relation para realizar consultas y actualizaciones es la API preferida. (Commit)

  • Se obsoletó add_timestamps y t.timestamps sin pasar la opción :null. El valor predeterminado de null: true cambiará en Rails 5 a null: false. (Pull Request)

  • Se obsoletó Reflection#source_macro sin reemplazo, ya que ya no es necesario en Active Record. (Pull Request)

  • Se obsoletó serialized_attributes sin reemplazo. (Pull Request)

  • Se obsoletó devolver nil desde column_for_attribute cuando no existe una columna. Devolverá un objeto nulo en Rails 5.0. (Pull Request)

  • Se obsoletó usar .joins, .preload y .eager_load con asociaciones que dependen del estado de la instancia (es decir, aquellas definidas con un ámbito que toma un argumento) sin reemplazo. (Commit)

7.5 Cambios destacados

  • SchemaDumper utiliza force: :cascade en create_table. Esto permite recargar un esquema cuando hay claves externas en su lugar.

  • Se agregó la opción :required a las asociaciones singulares, que define una validación de presencia en la asociación. (Pull Request)

  • ActiveRecord::Dirty ahora detecta cambios en el lugar en valores mutables. Los atributos serializados en modelos de Active Record ya no se guardan cuando no han cambiado. Esto también funciona con otros tipos como columnas de cadena y columnas json en PostgreSQL. (Pull Requests 1, 2, 3)

  • Se introdujo la tarea Rake db:purge para vaciar la base de datos del entorno actual. (Commit)

  • Se introdujo ActiveRecord::Base#validate! que genera una excepción ActiveRecord::RecordInvalid si el registro no es válido. (Pull Request)

  • Se introdujo validate como un alias para valid?. (Pull Request)

  • touch ahora acepta múltiples atributos para ser actualizados al mismo tiempo. (Pull Request)

  • El adaptador PostgreSQL ahora admite el tipo de dato jsonb en PostgreSQL 9.4+. (Pull Request)

  • Los adaptadores PostgreSQL y SQLite ya no agregan un límite predeterminado de 255 caracteres en columnas de cadena. (Pull Request)

  • Se agregó soporte para el tipo de columna citext en el adaptador PostgreSQL. (Pull Request)

  • Se agregó soporte para tipos de rango creados por el usuario en el adaptador PostgreSQL. (Commit)

  • sqlite3:///some/path ahora se resuelve a la ruta absoluta del sistema /some/path. Para rutas relativas, use sqlite3:some/path en su lugar. (Anteriormente, sqlite3:///some/path se resolvía a la ruta relativa some/path. Este comportamiento fue obsoleto en Rails 4.1). (Pull Request)

  • Se agregó soporte para segundos fraccionarios para MySQL 5.6 y superior. (Pull Request 1, 2)

  • Se agregó ActiveRecord::Base#pretty_print para imprimir modelos de forma legible. (Pull Request)

  • ActiveRecord::Base#reload ahora se comporta igual que m = Model.find(m.id), lo que significa que ya no conserva los atributos adicionales de SELECT personalizados. (Pull Request)

  • ActiveRecord::Base#reflections ahora devuelve un hash con claves de tipo string en lugar de claves de tipo símbolo. (Pull Request)

  • El método references en las migraciones ahora admite una opción type para especificar el tipo de la clave foránea (por ejemplo, :uuid). (Pull Request)

8 Active Model

Consulte el registro de cambios para obtener cambios detallados.

8.1 Eliminaciones

  • Se eliminó el método Validator#setup obsoleto sin reemplazo. (Pull Request)

8.2 Obsolescencias

  • Se ha vuelto obsoleto el método reset_#{attribute} en favor de restore_#{attribute}. (Pull Request)

  • Se ha vuelto obsoleto ActiveModel::Dirty#reset_changes en favor de clear_changes_information. (Pull Request)

8.3 Cambios destacados

  • Se introdujo validate como un alias de valid?. (Pull Request)

  • Se introdujo el método restore_attributes en ActiveModel::Dirty para restaurar los atributos modificados (sucios) a sus valores anteriores. (Pull Request 1, 2)

  • has_secure_password ya no impide contraseñas en blanco (es decir, contraseñas que contienen solo espacios) de forma predeterminada. (Pull Request)

  • has_secure_password ahora verifica que la contraseña proporcionada tenga menos de 72 caracteres si las validaciones están habilitadas. (Pull Request)

9 Active Support

Consulte el registro de cambios para obtener cambios detallados.

9.1 Eliminaciones

  • Se eliminaron los métodos obsoletos Numeric#ago, Numeric#until, Numeric#since, Numeric#from_now. (Commit)

  • Se eliminaron los terminadores basados en cadenas obsoletos para ActiveSupport::Callbacks. (Pull Request)

9.2 Obsolescencias

  • Se ha vuelto obsoleto Kernel#silence_stderr, Kernel#capture y Kernel#quietly sin reemplazo. (Pull Request)

  • Se ha vuelto obsoleto Class#superclass_delegating_accessor, use Class#class_attribute en su lugar. (Pull Request)

  • Se ha vuelto obsoleto ActiveSupport::SafeBuffer#prepend! ya que ActiveSupport::SafeBuffer#prepend ahora realiza la misma función. (Pull Request)

9.3 Cambios destacados

  • Se introdujo una nueva opción de configuración active_support.test_order para especificar el orden en que se ejecutan los casos de prueba. Esta opción actualmente tiene un valor predeterminado de :sorted, pero se cambiará a :random en Rails 5.0. (Commit)

  • Object#try y Object#try! ahora se pueden usar sin un receptor explícito en el bloque. (Commit, Pull Request)

  • El ayudante de prueba travel_to ahora trunca el componente usec a 0. (Commit)

  • Se introdujo Object#itself como una función de identidad. (Commit 1, 2)

  • Object#with_options ahora se puede usar sin un receptor explícito en el bloque. (Pull Request)

  • Se introdujo String#truncate_words para truncar una cadena por un número de palabras. (Pull Request)

  • Se agregaron Hash#transform_values y Hash#transform_values! para simplificar un patrón común en el que los valores de un hash deben cambiar, pero las claves se mantienen iguales. (Pull Request)

  • El ayudante de inflexión humanize ahora elimina cualquier guión bajo inicial. (Commit)

  • Se introdujo Concern#class_methods como una alternativa a module ClassMethods, así como Kernel#concern para evitar la plantilla module Foo; extend ActiveSupport::Concern; end. (Commit)

  • Nueva guía sobre la carga automática y recarga de constantes.

10 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 hoy. 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.