Вызов метода базового класса из перегруженного метода в подклассе - PullRequest
35 голосов
/ 10 октября 2009

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

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

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

Вот что я пробовал, но похоже, что ключевое слово 'super' не то, что я ожидал:

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

1 Ответ

62 голосов
/ 10 октября 2009

Вы пытались вызвать метод "authorize" базового класса, просто "super" вместо "super.authorize"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...