以下是Rails应用程序中before_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
我对before_action
的理解是,控制器中controller_method
和/或private_method
的任何调用和module_method
included
来自Module1
}将触发before_action action1
的执行。这是对的吗?
答案 0 :(得分: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。
答案 1 :(得分:1)
是
Module1
中包含的所有方法都将成为ExampleController
的一部分,因此它与您在该类中定义这些方法的方法相同。当您调用模块中包含的任何方法时,将首先执行before操作的回调。
答案 2 :(得分:0)
我相信你是对的。无论如何,你也可以定义一个“only”子句。请记住,这只适用于声明的方法。
最好!