2009-10-10 2 views
29

Возможно, я просто не использую правильную терминологию для Ruby (и, если я, пожалуйста, исправлю меня), но Google просто не помогает мне в этом.Вызов метода базового класса из перегруженного метода в подклассе

У меня есть класс (назовите его OrderController), который расширяет другой класс (назовите его BaseStoreController). В BaseStoreController я определил before_filter, который используется на моем сайте, с небольшим, за исключением моего OrderController. В этой конкретной ситуации мне нужно было определить настраиваемый before_filter, который должен выполнить некоторую дополнительную логику, а затем вызвать before_filter, определенный в моем BaseStoreController.

Что я не знаю, как это сделать.

Вот что я пытался, но это, кажется, что «супер» ключевое слово не то, что я ожидал, что это будет:

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 

Конечный результат моего кода заключается в том, что метод авторизации в OrderController не работает со следующей ошибкой:

 
You have a nil object when you didn't expect it! 
The error occurred while evaluating nil.authorize 

ответ

56

Вы пробовали позвонить Метод "authorize" у результата "super"?

+2

ничего себе! Я думаю, что мой опыт работы с другими языками навредил мне в этом ... Я ожидал, что супер будет ссылкой на базовый класс ... не ссылка на метод базового класса, который я скрывал. Это работало как шарм, спасибо! –

+3

В Ruby 'super' - это вызов унаследованной версии метода, поэтому вы вызывали' authorize' на все, что было возвращено, в этом случае 'nil'. –

+0

Как бы на самом деле ссылаться на базовый класс? – Shayne

Смежные вопросы