3

同様の動作をするコントローラーがたくさんあります。たとえば、ユーザーがログインする必要があり、スコープを設定する必要があり、current_account / current_userを設定し、権限をキャッシュする必要があります。

標準のコントローラーを使用して、それをサブクラス化することを考えています。

class MyStandardController < ApplicationController
 before_filter :xyz
end 

class SomeController < MyStandardController
end

私が疑問に思っているのは、いつ電話をかける必要があるのか​​ということですsuper

4

1 に答える 1

5

super別のコントローラーから継承するコントローラー内で呼び出す必要はありません。実際、そうすることはおそらく奇妙なことでしょう。Superは、スーパークラスから同じ名前のメソッドを実行します。おそらくMyStandardController、その子で再定義するメソッドはありません。

これを行う主な理由は、あなたが自分で言ったように、フィルターとメソッドをコントローラー間で簡単に名前空間化するためです。私たちはアプリでこれに似た何かをします。そこでは、非常によく似た動作をするサイトの1つの領域が、すべての子でのみ使用できるプライベートコンビニエンスメソッドのセクションを持つコントローラー(ShoppingControllerなど)から継承されます。

ただし、現実的には、必要な機能を実装するモジュールを用意し、それらを必要なコントローラーに含める方がよいでしょう。最終的には、あるコントローラーから別のコントローラーに何かが必要になる可能性があります。これは、複雑な継承階層よりもモジュールの方がはるかに簡単です。

于 2012-03-21T15:14:13.427 に答える