Rails around_action包括回调之前和之后?

时间:2015-03-25 06:16:56

标签: ruby-on-rails ruby

around_action中的ApplicationController::Base是否包含before_actionafter_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会被执行吗?

1 个答案:

答案 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)。

另外,为什么不尝试使用控制台输出或其他东西呢?这种类型的东西应该很容易通过快速试验来验证(我怀疑,这个问题的背后原因)。