2011-07-02 23 views
0

Railsの手続きの背景から来るオブジェクトの向きと継承の概念を頭に入れようとしています。特に、Railsフレームワークのクラスでのデフォルト動作をどのように上書きするかを理解したいと思います。ActionDispatch :: Requestメソッドのオーバーライド

セイは、例えば私はActionDispatch ::要求でメソッドをオーバーライドしたかった、私はこのような何か前提としています

Request < ActionDispatch::Request 

def method_i_want_to_override 
    actions_to_perform 
end 

end 

を私はそれが方法を変更するために、私は順序でこれをロードする方法ものの混乱していますActionDispatch :: Requestオブジェクトが動作します。あなたは、継承を使用してメソッドをオーバーライドすると、あなたが行っているよう

答えて

1

(つまり、あなたは、サブクラスの中にいる)、あなただけ、再びメソッドを宣言することができます。

def method_that_exists_in_superclass 
    # stuff here 
end 

を今、しばしばあなたがドン」メソッド全体の振る舞いを再実装したいのであれば、すでに行っていることに何か追加したい(または、元に戻す)だけです。あなたが期待よう

def method_that_exists_in_superclass 
    result = super 
    result + 7 # for example... but use your imagination 
end 

あなたはまた、スーパーに引数を渡すことができ、あなた自身のいずれかをハードコーディングすることにより、引数を上書きすることができます意味:この場合、あなたは、元のメソッドを呼び出すためにsuperを使用

def method_that_exists_in_superclass(arg1, arg2) 
    super(arg1, :foo) 
end 

引数なしでsuperを呼び出すと、サブクラスのメソッドの引数がすべて親に渡されます。これには、与えられたブロックが含まれます。

関連する問題