Có lẽ tôi chỉ không sử dụng thuật ngữ chính xác cho Ruby (và nếu tôi làm đúng), nhưng Google không giúp tôi.Gọi phương thức lớp cơ sở từ phương thức quá tải trong lớp phụ
Những gì tôi có là một lớp (gọi nó là OrderController) mở rộng một lớp khác (gọi nó là BaseStoreController). Trong BaseStoreController tôi đã định nghĩa một before_filter
được sử dụng trong toàn bộ trang web của tôi, với số lượng nhỏ ngoại trừ OrderController của tôi. Trong tình huống rất cụ thể này, tôi cần xác định một tùy chỉnh before_filter
cần thực hiện một số logic bổ sung và sau đó gọi số before_filter
được định nghĩa trong BaseStoreController của tôi.
Điều tôi không biết là cách thực hiện việc này.
Dưới đây là những gì tôi đã cố gắng, nhưng có vẻ như từ khóa 'siêu' không phải là những gì tôi đã mong nó sẽ được:
class BaseStoreController < ActionController::Base
before_filter :authorize
protected
def authorize
#common authroization logic here
end
end
và
class OrderController < BaseStoreController
before_filter :authorize
protected
def authorize
#additional authroization logic here
super.authorize
end
end
Kết quả cuối cùng của mã của tôi là phương thức ủy quyền trong OrderController không thành công với lỗi sau:
You have a nil object when you didn't expect it! The error occurred while evaluating nil.authorize
wow! Tôi đoán kinh nghiệm của mình với các ngôn ngữ khác đã gây hại cho tôi về điều này ... Tôi mong đợi siêu là một tham chiếu đến lớp cơ sở ... không phải là tham chiếu đến phương pháp lớp cơ sở mà tôi đang ẩn. Điều đó làm việc như một sự quyến rũ, cảm ơn! –
Trong Ruby, 'super' là một cuộc gọi đến phiên bản kế thừa của phương thức, vì vậy bạn đang gọi' authorize' trên bất kỳ thứ gì được trả về - trong trường hợp này là 'nil'. –
Làm cách nào để thực sự tham khảo lớp cơ sở? – Shayne