Я пытаюсь переопределить динамически сгенерированный метод, включив модуль.Почему включение этого модуля не отменяет динамически сгенерированный метод?
В приведенном ниже примере ассоциация Ripple добавляет метод rows=
в таблицу. Я хочу называть этот метод, но потом делать некоторые дополнительные вещи.
Я создал модуль для переопределения метода, считая, что модуль row=
сможет вызвать super
, чтобы использовать существующий метод.
class Table
# Ripple association - creates rows= method
many :rows, :class_name => Table::Row
# Hacky first attempt to use the dynamically-created
# method and also do additional stuff - I would actually
# move this code elsewhere if it worked
module RowNormalizer
def rows=(*args)
rows = super
rows.map!(&:normalize_prior_year)
end
end
include RowNormalizer
end
Однако мой новый rows=
никогда не вызывается, о чем свидетельствует тот факт, что если я поднимаю исключение внутри него, ничего не происходит.
Я знаю, что модуль входит в комплект, потому что, если я помещу его в это, мое исключение будет поднято.
included do
raise 'I got included, woo!'
end
Кроме того, если вместо rows=
, модуль определяет somethingelse=
, что метод является вызываемым.
Почему мой метод модуля не переопределяет динамически сгенерированный?
Я собирался подняться, но затем вы свалили и оставили всех висевших. :-) –
Спасибо! Я должен был знать это: я написал цепочку наследования здесь ... http://stackoverflow.com/questions/3492679/ruby-determining-method-origins :) –