我试图通过包含一个模块来覆盖动态生成的方法。
在下面的示例中,Ripple 关联将rows=
方法添加到 Table。我想调用那个方法,但之后还要做一些额外的事情。
我创建了一个模块来覆盖该方法,认为该模块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
但是,我的 newrows=
从未被调用,事实证明,如果我在其中引发异常,则什么也不会发生。
我知道该模块已被包含在内,因为如果我将其放入其中,则会引发异常。
included do
raise 'I got included, woo!'
end
此外,如果rows=
模块定义了somethingelse=
,而不是 ,则该方法是可调用的。
为什么我的模块方法没有覆盖动态生成的方法?