2016-04-06 4 views
0

はRailsのアプリでbefore_actionとコントローラの例です:before_actionbefore_actionがコントローラでトリガされたときは?ここ

class ExampleController < ApplicationController 
    include Module1 
    before_action :action1 

    def controller_method 
    ... 
    end 

    private 
    def private_method 
    ... 
    end 
end 

Module Module1 
    def module_method 
    ... 
    end 
end 

私の理解では、Module1からcontroller_methodおよび/またはprivate_methodコントローラ内および/またはmodule_methodincludedへの呼び出しがの実行をトリガーするということですbefore_action action1。あれは正しいですか?

答えて

0

私はあなたが正しいと信じています。とにかく、 "only"節も定義できます。宣言されたメソッドでのみ動作することを忘れないでください。

最高!

1

はい。

Module1に含まれるすべてのメソッドは、ExampleControllerの一部になります。したがって、そのクラスでこれらのメソッドを定義した場合と同じになります。モジュールからインクルードされているメソッドを呼び出すと、beforeアクションのコールバックが最初に実行されます。

2

いいえ、すべての呼び出しではなく、アクション(ルート呼び出し)、通常はプライベートメソッドはアクションとして呼び出されないため、プライベートメソッドは* _actionコールバックをトリガーしません。あなたの例:

class ExampleController < ApplicationController 
    include Module1 
    before_action :action1 

    def controller_method 
    // when you call public, protected, or private methods here, 
    // the *_action callback will not called 
    // becouse it not a call delegated by routes 
    private_method 
    end 

    private 
    def private_method 
    ... 
    end 
end 

注記私はcontroller_methodに追加しました。 "/ exaple/contoller_method"のようなルートに到達すると、contoller_methodが呼び出されます。その前に、action1がbefore_actionとして呼び出されます。しかし、contoller_methodの中でメソッドを呼び出すと、before_actionはこの内部コールのためにトリガされません。

+0

名前付けルートは 'before_action'もトリガーしますか?ありがとう。 – user938363

+1

はい、それを設定すると、関連するアクションがbefore_actionをトリガーします。 –

関連する問題