おそらく私はRubyの正しい用語を使用していないかもしれませんが(私が訂正してください)、Googleはこれで私を助けてくれません。サブクラスのオーバーロードされたメソッドからの基底クラスメソッドの呼び出し
私が持っているのは、別のクラス(BaseStoreControllerと呼ぶ)を拡張するクラス(OrderControllerと呼ぶ)です。 BaseStoreControllerでは、自分のサイト全体で使用されているbefore_filter
を定義しました。この非常に特殊な状況では、私は追加のロジックを行う必要があるカスタム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のauthorizeメソッドが次のエラーで失敗しているということです:
You have a nil object when you didn't expect it! The error occurred while evaluating nil.authorize
うわー! 私は他の言語での私の経験が私にこのことを害していたと思います...私はスーパークラスがベースクラスへの参照になると予想しました...私が隠していたベースクラスメソッドへの参照ではありません。 それは魅力のように働いた、ありがとう! –
Rubyでは、 'super'はメソッドの継承バージョンへの呼び出しです。返されたものに' authorize'を呼び出していました。この場合は 'nil'です。 –
基本クラスを実際にどのように参照していますか? – Shayne