В активной модели записи мы переопределяем метод serializable_hash
и вызываем super options
после установки параметров, соответствующих нашим потребностям.Как serializable_hash супер получает параметры, определенные в моем переопределенном методе?
Обычно мы делаем:
def serializable_hash options=nil
options ||= {
only: [
:id,
:special_instructions
],
include: { images: nil },
methods: [:catalog_item_name, ]
}
super options
end
Но в одной из моделей, случайно, мы были не прохождение options
явно супер метод. Тем не менее, похоже, он работает так же, как если бы мы проходили варианты.
После прочтения serializable_hash source code мы не можем найти причины для правильной инициализации параметров в методе супер.
Любые намеки на то, как это происходит?
Естественно, попытка воспроизвести структуру в рубиновом скрипте не означает, что это происходит одинаково. Вот что мы написали, чтобы попробовать его:
module MyModule
def my_module_method options=nil
options ||= { test: 'Test' }
end
end
class MyTest
include MyModule
def my_module_method
options = { bingo: 'Bingo!' }
super
end
end
puts MyTest.new.my_module_method
Это будет печатать { test: 'Test' }
и если мы передаем параметры (super options
), напечатает { bingo: 'Bingo!' }
(как и следовало ожидать)