2011-02-05 14 views
18

ACTUALIZACIÓN¿Cómo usar 'after_initialize' en Rails 3?

erróneamente he comprobado la guía edgerails en lugar de los carriles Actualmente correctas 3 de guía (que no tiene mención de after_initialize). Sin embargo, no estoy seguro de por qué la guía de edgerails es "incorrecta": ¿pensé que la guía de Edgerails debía ser la última guía actualizada?

Dejo esta pregunta tal como está, por si alguien viene a buscar el mismo "problema".

Llamada de macro-estilo al after_initialize es el camino a seguir.



caso after_initialize usarse como método o estilo macro llamada?

Esto funciona, pero da una advertencia desaprobación:

def after_initialize 
    logger.info "Called after_initialize" 
end 

Deprecation ADVERTENCIA: Base # after_initialize ya no se utiliza, por favor utilice Base.after_initialize: método 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 el Activo Guía de devoluciones de llamada Registro de Convalidaciones y en 10.4 after_initialize and after_find dice:

... Si intenta registrar after_initialize o after_find usando métodos de clase de estilo macro, solo se ignorarán . Este comportamiento es debido a razones de rendimiento, ya que after_initialize y after_find se ser llamados para cada registro encontrado en la base de datos, reduciendo significativamente por las consultas ...

Por lo que significa que la macro el uso del estilo es ineficiente frente a la forma de estilo de método?

(I supongo la guía está mal, 'porque el código es el rey: D)


otra actualización


Un commit here del 28 de enero del 2011, sugiere que la forma correcta todavía está por usar la llamada de estilo macro, no un def after_initialize.

+3

estoy usando after_initialize por ejemplo, para las asociaciones builings. Un ejemplo after_initialize: build_text,: unless =>: text. Muy útil cuando se utiliza accept_nested_attributes_for –

+0

Aquí hay un enlace actualizado [para la guía de Rails 4 after_initialize] (http://guides.rubyonrails.org/active_record_callbacks.html#after-initialize-and-after-find) – stereoscott

Respuesta