around_action
中的ApplicationController::Base
是否包含before_action
和after_action
?我理解around_action
包装了指定的操作,但是想知道它是否也包含了与该操作相关联的之前和之后的回调。
例如,让我们看一下从Rails文档修改的代码:
class ChangesController < ApplicationController
before_action :some_callback, only: show
around_action :wrap_in_transaction, only: :show
...
private
def wrap_in_transaction
yield unless true
end
end
some_callback
会被执行吗?
答案 0 :(得分:2)
是的,some_callback
将被执行。这些方法完全没有意识到彼此,并将按照它们的编写顺序执行。
您可能会感兴趣看到rails用来执行此操作的代码。您可以在https://github.com/rails/rails/blob/cdaab2c479c819b04cc72a97c52b804832365cef/actionpack/lib/abstract_controller/callbacks.rb#L180找到它。您会注意到他们都调用了_insert_callbacks
方法(https://github.com/rails/rails/blob/cdaab2c479c819b04cc72a97c52b804832365cef/actionpack/lib/abstract_controller/callbacks.rb#L87)。
另外,为什么不尝试使用控制台输出或其他东西呢?这种类型的东西应该很容易通过快速试验来验证(我怀疑,这个问题的背后原因)。