Me di cuenta de que Rails no desencadena la devolución de llamada after_initialize
cuando se pasa el símbolo de devolución de llamada como entrada.ActiveRecord: No llama a after_initialize cuando se pasa el nombre del método como un símbolo
El código siguiente no funciona.
class User < ActiveRecord::Base
after_initialize :init_data
def init_data
puts "In init_data"
end
end
El siguiente código funciona.
class User < ActiveRecord::Base
def after_initialize
init_data
end
def init_data
puts "In init_data"
end
end
¿Alguien puede explicar este comportamiento?
Nota 1
El ActiveRecord documentation dice lo siguiente acerca de after_initialize
:
Unlike all the other callbacks, after_find and after_initialize will
only be run if an explicit implementation is defined (def after_find).
In that case, all of the callback types will be called.
Aunque se afirma que after_initialize requiere la implementación explícita, creo que la segunda frase en el párrafo anterior ambigua, es decir, In that case, all of the callback types will be called.
¿Qué es all of the call back types
?
El ejemplo de código en la documentación tiene un ejemplo que no utiliza la aplicación explícita:
after_initialize EncryptionWrapper.new
Traté de hacer mi método de devolución de llamada privada, y todavía tiene el mismo comportamiento. –