首页 文章

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

提问于
浏览
0

我有一个Rails关注点定义如下:

module MyConcern
  extend ActiveSupport::Concern

  included do
    before_filter :filter_inside_concern
  end

  def filter_inside_concern
    # ...
  end
end

我在控制器层上也有一个 before_filter

class MyController < ApplicationController
  before_filter :filter_inside_controller
end

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

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end

filter_inside_concernfilter_inside_controller 之前被调用(反之亦然)?

谢谢!

2 回答

  • 1

    如果您使用:

    class MyController < ApplicationController
      include MyConcern
    
      before_filter :filter_inside_controller
    end
    

    filter_inside_concern 将在 filter_inside_controller 之前被调用

    如果你想在 filter_inside_concern 之前调用 filter_inside_controller ,则需要使用 prepend_before_filter 代替:

    class MyController < ApplicationController
      include MyConcern
    
      prepend_before_filter :filter_inside_controller
    end
    

    另请注意, before_filterprepend_before_filter 将被弃用 . 您应该使用 before_actionprepend_before_action 代替 .

  • 0

    我重新创建了你的情况,并找出执行顺序取决于你编写两个过滤器的顺序 .

    如果你写

    include MyConcern
      before_filter :filter_inside_controller
    

    关注过滤器将首先执行

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

    before_filter :filter_inside_controller
      include MyConcern
    

    控制器过滤器将首先执行

相关问题