2011-08-14 9 views
9

コントローラのうち2つで必要なコードがありますが、すべてではありません。この方法はどこに属していますか? 私はヘルパーについて読んだことがありますが、それらはビュー関連のコードのようです。誰かがlib-folderを提案しましたが、それはコントローラのロジックとは遠すぎるようです。私はビューやモデルでは必要ありません。 誰かがこの種の問題を経験していますか?レール3 - 複数のコントローラ間で共有されるコード - 配置場所

答えて

11

3つのオプションがありますが、もっとも簡単なのはアプリケーションコントローラです(もっとも汚れていますが)。他の2つのオプションは共有の親コントローラです

class FooController < FooBarParentController 
    # code here 
end 

class BarController < FooBarParentController 
    # code here 
end 

これらのコントローラの関連性に依存します。

最終的な解決策は、必要な共有コードは、アドホックコントローラの一握りのためにある場所ですモジュール

module FooBarModule 
    extend ActiveSupport::Concern 

    included do 
    # class level code 
    # before_filter .... 
    end 

    module ClassMethods 
    # all class methods here 
    end 

    # instance methods here 
end 

ある、または既に上記の継承を使用している場合、このコードはなく、かなりのんこのサブセットに適合します(したがって、複数の継承をエミュレートしようとします)。

+0

この有益な回答をいただきありがとうございます。最後の解決策は私にとって最も柔軟に思えるので、私はこれを試してみたいと思います。私はこのコードをどこに置くべきか少し説明できますか(lib-folderのモジュールにありますか?) – user573335

+0

私は個人的にコントローラフォルダに入れます。 –

+0

このアプリケーションに特に関係する場合は、appフォルダー(おそらく 'modules'サブディレクトリー)の下に置いてください。 libフォルダは、アプリケーション固有のユーティリティではありません。 –

関連する問題