2017-03-08 3 views
0

includedブロックを使用してRailsヘルパー内にコントローラを組み込むことは可能ですか?私はこのような何かを考えている: ヘルパー内で「includable」Railsコントローラアクションを作成する

module XablauHelper 
    included do 
    def my_shared_action 
     true 
    end 
    end 
end 

が既に class.evalブロックを貫通して self.my_shared_actionつまりクラスメソッドが、無成功のように使って、それをやってみました、私はすでに希望と親コントローラを作っている解決策を発見しましたモジュール化された設計のために、私はよりグローバルなアプローチにしたいと考えています。私は私のソリューションと再利用コード、継承を使用しない提案を再現することができますか?これらのメソッドは、あなたの ビューために意図されているようは、おそらく間違った選択である ヘルパーでコントローラアクションを追加

+1

あなたが懸念http://api.rubyonrails.org/classes/ActiveSupport/Concern.html – mdesantis

答えて

1

代わりにコントローラの懸案事項を使用し、必要な場所にそれらを含めることを検討してください。たとえば、以下のようになります。

# in app/controllers/concerns/useful_functions_concern.rb 
module UsefulFunctionsConcern 
    extend ActiveSupport::Concern 

    included do 
    rescue_from SomeException, with: :handle_access_denied 
    end 

    def useful_method 
    # ... 
    end 

    protected 
    def handle_access_denied 
    # ... 
    end 
end 

# in your controller 
class XyzController < ApplicationController 
    include UsefulFunctionsConcern 

    def index 
    useful_method 
    end 
end 

ここで、共通のコントローラの動作を共有でき、コントローラに共通のものがあります。彼らはすべてのAPIコントローラであり、これを実現するために継承を使用することも検討します。たとえば:

# parent controller 
class ApiController < ApplicationController 
    def my_shared_action 
    end 
end 

class SpecificApiController < ApiController 
end 
+0

クリーンかつ簡単に、感謝を使用する必要があります!私は数日後に解決策を試み、成功すれば正解とマークします。 – ErvalhouS

関連する問題