从子类中的重载方法调用基类方法

时间:2009-10-10 04:41:27

标签: ruby-on-rails ruby

也许我只是没有使用Ruby的正确术语(如果我请你纠正我),但谷歌并没有帮我这个。

我所拥有的是一个类(称为OrderController),它扩展了另一个类(称之为BaseStoreController)。在BaseStoreController中,我定义了一个在我的站点中使用的before_filter,除了我的OrderController之外还有一些小的。在这种非常特殊的情况下,我需要定义一个需要执行一些额外逻辑的自定义before_filter,然后调用我的BaseStoreController中定义的before_filter

我不知道的是如何做到这一点。

以下是我尝试过的内容,但似乎“超级”关键字并非我所期望的那样:

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中的authorize方法失败并出现以下错误:

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

1 个答案:

答案 0 :(得分:62)

您是否尝试使用“authorize”代替“super”来调用基类的“super.authorize”方法?