2011-01-13 4 views
3

私は、同じメソッドを約5つ使用する2つのコントローラ(ArticlesControllerとPostsController)を持っています。これらは、5つのメソッドを使用する唯一の2つのコントローラなので、ApplicationControllerに配置する必要はありません。現在、ベースコントローラー(ContentController)を作成してから、既存の2つのコントローラーをこのベースから継承しています。複数のRailsコントローラで使用されるメソッドの場所とベースコントローラへのアクセスを制限する

私の質問は、これは重複を減らすための最良のアプローチですか?

第2の質問 - これらのメソッドには、ベースから継承するコントローラのみがアクセスできるようにする方法を教えてください。上記の例では、ContentControllerに直接アクセスする必要はありません。

ありがとうございます!

+0

がちょうど更新私の答え、fyi ... 2年後;) – tybro0103

答えて

5

私は、ArticlesControllerとPostsControllerの両方が継承している共通の祖先は完全に受け入れ可能だと思います。それは継承があるのですか? ContentControllerから直接アクションを公開したくない場合は、ルートがContentControllerにルーティングされていないことを確認してください。

これを実行するもう1つの方法は、それらの機能用のモジュールを作成し、必要に応じてそのモジュールを組み込むことです。あなたはモジュール「マイ機能」を呼び出したいとしましょう:

/lib/my_functions.rb:

module MyFunctions 
    def function1 
    ... 
    end 

    def function2 
    ... 
    end 

    ... 
end 

次に、あなたがこれらの機能を必要な場所だけでそのモジュールが含まれています

class PostsController < ActionController::Base 
    include MyFunctions 
    ... 
end 

class ArticlesController < ActionController::Base 
    include MyFunctions 
    ... 
end 
関連する問題