Почему включение этого модуля не отменяет динамически сгенерированный метод?

Я пытаюсь переопределить динамически сгенерированный метод, включив модуль.

В приведенном ниже примере ассоциация Ripple добавляет строк = метод в Табл. Я хочу вызвать этот метод, но потом сделаю еще кое-что.

Я создал модуль для переопределения метода, думая, что модуль ' s 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 = , этот метод вызывается.

Почему нет? т мой метод модуля переопределяет динамически сгенерированный?

6
задан Nathan Long 19 January 2011 в 22:09
поделиться