Возможно, я просто не использую правильную терминологию для 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
ничего себе! Я думаю, что мой опыт работы с другими языками навредил мне в этом ... Я ожидал, что супер будет ссылкой на базовый класс ... не ссылка на метод базового класса, который я скрывал. Это работало как шарм, спасибо! –
В Ruby 'super' - это вызов унаследованной версии метода, поэтому вы вызывали' authorize' на все, что было возвращено, в этом случае 'nil'. –
Как бы на самом деле ссылаться на базовый класс? – Shayne