2015-03-25 30 views
0

是否around_actionApplicationController::Base包括before_actionafter_action?我知道around_action包装了指定的动作,但是想知道它是否包含之前以及与该动作相关的回调之后。Rails的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曾经被执行?

回答

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

此外,为什么不尝试使用控制台输出或什么?这种类型的事情应该很容易通过快速审判来验证(这是我怀疑,这个问题背后的原因)。

+0

谢谢。我没有太多时间来测试这一点,并认为在SO上提供这方面的知识是件好事。 – 2015-03-26 07:43:33

+0

@MikeC不客气。这对我来说很有意思,因为我不确定它是如何工作的,而且必须查看它才能满足我的好奇心。 – 2015-03-26 14:21:56