我試圖通過包含一個模塊來覆蓋動態生成的方法。爲什麼包含此模塊不覆蓋動態生成的方法?
在下面的示例中,紋波關聯在表格中添加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=
,該方法是可調用。
爲什麼我的模塊方法不是覆蓋動態生成的方法?
我正要打起精神來,但是後來你們落後了,讓所有人都掛了。 :-) – 2011-01-19 22:46:00
謝謝!我應該知道這一點:我在這裏寫出了繼承鏈... http://stackoverflow.com/questions/3492679/ruby-determining-method-origins :) – 2011-01-20 14:25:35