2015-11-12 8 views
5

Iは、2つのコントローラを有することにより、共有メソッド、すなわち 1)carts_controller 2)orders_controllerRails4:複数のコントローラ

class CartsController < ApplicationController 
    helper_method :method3 

    def method1 
    end 

    def method2 
    end 

    def method3 
    # using method1 and method2 
    end 
end 

注:method3method1method2を使用しています。 CartsControllerは、方法3を使用していて、正常に動作するshowcart.html.erbビューを持っています。

今すぐ注文するには、カート(showcart.html.erb)を表示する必要がありますが、ヘルパーmethod3carts_controllerで定義されているため、アクセスできません。

修正方法?

答えて

19

にアクセスできるようになりますので、コントローラーはコントローラの問題を使用することです。コントローラの懸念事項は、コントローラ間でコードを共有するためにコントローラに混在させることができるモジュールです。したがって、共通のヘルパーメソッドをコントローラーの関心事に置き、ヘルパーメソッドを使用する必要があるすべてのコントローラーに懸念モジュールを含める必要があります。

2台のコントローラ間でmethod3を共有したい場合は、それを心配する必要があります。コントローラー間で懸念事項を作成し、コード/メソッドを共有する方法については、this tutorialを参照してください。ここで

は、あなたが軌道に乗るのに役立ついくつかのコードです:あなたがすべき、

class CartsController < ApplicationController 
    include YourControllerConcern 
    # rest of the controller codes 
end 

class OrdersController < ApplicationController 
    include YourControllerConcern 
    # rest of the controller codes 
end 

:、その後

# app/controllers/concerns/your_controller_concern.rb 
module YourControllerConcern 
    extend ActiveSupport::Concern 

    included do 
    helper_method :method3 
    end 

    def method3 
    # method code here 
    end 
end 

あなたのコントローラでの懸念を含める:

は、あなたが懸念をコントローラの定義します両方のコントローラーでmethod3を使用できるようにしてください。

+1

Thanks Rakibul。できます。しかし、私の場合は、CartsControllerConcernの中にmethod1&2を追加する必要もあります。今日は新しいことを学んだ:) – Khoga

0

他のコントローラのメソッドは、現在のリクエストでインスタンス化されていないため使用できません。

両方のコントローラ(またはApplicationControllerに)の親クラスに、またはヘルパーに移動し、3つのすべてのメソッドに、あなたはRailsの4、あなたの間で共有コードの推奨される方法を使用していると、彼らは両方の

+0

ありがとうございました。ヘルパーとアプリケーションも機能します。 – Khoga