Rails 控制器中 before_filters 的顺序和关注点

Adl*_*tos 4 ruby-on-rails before-filter actioncontroller ruby-on-rails-4 activesupport-concern

我有一个 Rails 问题定义如下:

module MyConcern
  extend ActiveSupport::Concern

  included do
    before_filter :filter_inside_concern
  end

  def filter_inside_concern
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

before_filter在控制器层也有一个:

class MyController < ApplicationController
  before_filter :filter_inside_controller
end
Run Code Online (Sandbox Code Playgroud)

如果我包含MyConcerninside MyController,调用 before 过滤器的顺序是否取决于代码的排列方式?例如,如果我们有

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end
Run Code Online (Sandbox Code Playgroud)

filter_inside_concern之前是否被调用过filter_inside_controller(反之亦然)?

谢谢你!

Asa*_*Ali 6

我重新创建了您的情况,并发现执行顺序取决于您编写两个过滤器的顺序。

如果你写

  include MyConcern
  before_filter :filter_inside_controller
Run Code Online (Sandbox Code Playgroud)

关注过滤器将首先执行

或者如果您按此顺序编写过滤器

  before_filter :filter_inside_controller
  include MyConcern
Run Code Online (Sandbox Code Playgroud)

控制器过滤器将首先执行