Tôi đang cố gắng ghi đè phương thức được tạo động bằng cách bao gồm một mô-đun.Tại sao bao gồm mô-đun này không ghi đè lên phương pháp được tạo động?
Trong ví dụ bên dưới, liên kết Ripple thêm phương thức rows=
vào Bảng. Tôi muốn gọi phương pháp đó, nhưng cũng làm một số công cụ bổ sung sau đó.
Tôi đã tạo mô-đun để ghi đè phương pháp, nghĩ rằng mô-đun row=
sẽ có thể gọi super
để sử dụng phương pháp hiện có.
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
Tuy nhiên, tôi mới rows=
không bao giờ được gọi là, được minh chứng bởi thực tế rằng nếu tôi tăng một ngoại lệ bên trong nó, không có gì xảy ra.
Tôi biết mô-đun đang được bao gồm, bởi vì nếu tôi đặt nó vào trong đó, ngoại lệ của tôi sẽ được nâng lên.
included do
raise 'I got included, woo!'
end
Ngoài ra, nếu thay vì rows=
, module định nghĩa somethingelse=
, phương pháp đó là callable.
Tại sao phương pháp mô-đun của tôi không ghi đè phương thức được tạo động?
Tôi sắp sửa thăng hoa, nhưng sau đó bạn tắt và để mọi người bỏ cuộc. :-) –
Cảm ơn! Tôi nên biết điều này: Tôi đã viết ra chuỗi thừa kế ở đây ... http://stackoverflow.com/questions/3492679/ruby-determining-method-origins :) –