Novedades en Edge Rails #8

Nota: Este artículo es traducción del publicado el 26 de Diciembre de 2008 por Mike Gunderloy en el blog de Ruby on Rails.

El mayor cambio que se ha producido en Rails aún no está reflejado en el propio código. Hablamos, claro está, de la fusión con Merb en Rails 3. Hay una rama 3-0-unstable en el repositorio pero aún no se ha separado de la rama principal de desarrollo. De momento nos seguiremos centrando en la rama master que verá la luz como Rails 2.3.

Y Rails 2.3 continúa cociéndose. El equipo hizo 39 entregas esta semana, a pesar de que mucha gente se ha ido de vacaciones. Muchas fueron correcciones menores de fallos, pero hay algunas cosas que podrían resultar de interés

Unificación del rendering

ActionController::Base#render ahora es mucho más astuto a la hora de decidir qué mostrar. Basta con echarle cosas y esperar que saque los resultados correctos. Si estamos usando Rails 2.2, por lo general debemos dar información explícita sobre qué es lo que hay que mostrar:

render :file => '/tmp/random_file.erb'
render :template => 'other_controller/action'
render :action => 'show'

Ahora en Rails .3, basta con proporcionar lo que queremos mostrar:

render '/tmp/random_file.erb'
render 'other_controller/action'
render 'show'
render :show

Ahora Rails escogerá entre archivo, plantilla o acción dependiendo de si hay un '/' al principio, un '/' en medio, o ningún '/'. También se puede enviar un símbolo cuando queramos mostrar una acción. Otros estilos de invocación (:inline, :text, :update, :nothing, :json, :xml, :js) aun necesitan la opción explícita.

<p><a href="http://github.com/rails/rails/commit/061952392afd1dae1aa97a816e9a0c79df7c4514">commit</a> <a href="http://github.com/rails/rails/commit/d67e03871eabb912434dafac3eeb8e6ea7c5585f">commit</a>

commit commit

Correcciones en ActiveRecord

Un par de correcciones en ActiveRecord para eliminar algunos casos en los que fallaban las asociaciones. Uno se encarga de poner comillas en los nombres de tablas en algunas asociaciones has_many :through si el nombre de la table contenía una palabra clave SQL. commit

La otra corrección permite utilizar un hash en las condiciones de una relación has_many:

has_many :orders, :conditions => {:status => 'confirmed'}

Esto funcionaba en Rails 2.1 pero falla en Rails 2.2 y funcionará otra vez en Rails 2.3 (en Rails 2.2 se puede usar una cadena en lugar de un hash para especificar las condiciones). commit

Se han eliminado algunos efectos colaterales de invocar Model#last (cambiaban el orden de otros finders dentro del mismo ámbito). commit

Prompts for Date Select Helpers

Con este parche, podemos proporcionar rótulos personalizados en los diversos helpers que tratan con fechas (date_select, time_select, y datetime_select) de la misma forma en que se hace con los helpers de selección de colecciones. Se puede pasar una cadena o un hash de cadenas individuales para cada componente. También se puede utilizar un rótulo genérico poniendo :prompt a true:

select_datetime(DateTime.now, :prompt => true)

select_datetime(DateTime.now, :prompt => "Choose date and time")

select_datetime(DateTime.now, :prompt => 
  {:day => 'Choose day', :month => 'Choose month', 
   :year => 'Choose year', :hour => 'Choose hour', 
   :minute => 'Choose minute'})

commit

Esto y lo otro

El script dbconsole ahora permite usar un password compuesto exclusivamente de números sin fallar. commit

Se pueden usar símbolos en la opción :type de send_file y send_data, por ejemplo: send_file("fabulous.png", :type => :png). commit

Si usamos los delegates de ActiveSupport, hay una nueva opción :allow_nil que permite devolver nil en lugar de levantar una excepción cuando el objeto destino es nil. commit

Se puede especificar una fecha y hora específica para los campos updated_at: cust = Customer.create(:name => "ABC Industries", :updated_at => 1.day.ago) commit

blog comments powered by Disqus