Я заметил, что Rails не запускает обратный вызов after_initialize
, когда символ обратного вызова передается в качестве ввода.
Код ниже не работает.
class User < ActiveRecord::Base
after_initialize :init_data
def init_data
puts "In init_data"
end
end
Код нижеработает.
class User < ActiveRecord::Base
def after_initialize
init_data
end
def init_data
puts "In init_data"
end
end
Может кто-нибудь объяснить это поведение?
Примечание 1
Документация ActiveRecord говорит следующее о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.
Хотя и утверждается, что after_initialize требует явной реализации, я нахожу второе предложение в вышеприведенном абзаце неоднозначным, т.е.Пример кода в документации содержит пример, который не использует явную реализацию:
after_initialize EncryptionWrapper.new