모듈을 포함하여 동적으로 생성 된 메서드를 재정의하려고합니다.왜이 모듈을 포함 시키면 동적으로 생성 된 메서드가 무시되지 않습니까?
아래 예에서 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 :) –