ruby-on-rails-3 - includes - ruby sql
¿Cómo usar ''after_initialize'' en Rails 3? (1)
ACTUALIZAR
Revisé erróneamente la guía de edgerails en lugar de la guía de Rails 3 actualmente correcta (que no tiene ninguna mención de after_initialize). Sin embargo, no estoy seguro de por qué la guía de edgerails es "incorrecta". Pensé que se suponía que la guía de edgerails era la última guía actualizada.
Dejo esta pregunta como está en caso de que alguien venga a buscar el mismo "problema".
Llamada de estilo macro a after_initialize
es el camino a seguir.
¿ after_initialize
debe usar after_initialize
como método o llamada de estilo macro?
Esto funciona, pero da una advertencia de desaprobación:
def after_initialize
logger.info "Called after_initialize"
end
ADVERTENCIA DE DEPRECATION: Base # after_initialize ha sido desaprobado, por favor use el método Base.after_initialize: en su lugar.
Esto funciona, y no hay ninguna advertencia:
after_initialize :do_this_after_initialize
def do_this_after_initialize
logger.info "Called after_initialize"
end
Pero la Guía de validación de registros activos y devoluciones de llamada en 10.4 after_initialize y after_find dice:
... Si intenta registrar after_initialize o after_find usando métodos de clase de estilo macro, simplemente se ignorarán. Este comportamiento se debe a razones de rendimiento, ya que se invocará after_initialize y after_find para cada registro encontrado en la base de datos, lo que ralentizará significativamente las consultas ...
¿Eso significa que el uso de estilo macro es ineficiente en comparación con el método de estilo de método?
( Supongo que la guía es incorrecta, porque el código es el rey: D)
Otra actualización Un compromiso aquí desde el 28 de enero de 2011 sugiere que la forma correcta es utilizar la llamada de estilo macro, no una def after_initialize
.
Las devoluciones de llamadas deben usarse como estilo de macro en su modelo: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html