2009-10-10 63 views
29

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 

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 

Trả lời

56

Bạn đã thử gọi điện thoại phương thức "authorize" của lớp cơ sở chỉ với "super" thay vì "super.authorize"?

+2

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! –

+3

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'. –

+0

Làm cách nào để thực sự tham khảo lớp cơ sở? – Shayne

Các vấn đề liên quan