过滤Rails控制器和关注点

我有一个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 ,调用前面的过滤器的顺序取决于代码的排列方式? 例如,如果我们有

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end

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

谢谢!


我已经重新创建了你的情况,并且找出执行的顺序取决于你写这两个过滤器的顺序。

如果你写

  include MyConcern
  before_filter :filter_inside_controller

关注过滤器将首先执行

或者按照这个顺序编写过滤器

  before_filter :filter_inside_controller
  include MyConcern

控制器过滤器将首先执行


如果你使用:

class MyController < ApplicationController
  include MyConcern

  before_filter :filter_inside_controller
end

filter_inside_concern将在filter_inside_controller之前被调用

如果您想在filter_inside_controller之前调用filter_inside_concern ,则需要使用prepend_before_filter

class MyController < ApplicationController
  include MyConcern

  prepend_before_filter :filter_inside_controller
end

作为一个方面说明, before_filterprepend_before_filter将被弃用。 您应该使用before_actionprepend_before_action来代替。

链接地址: http://www.djcxy.com/p/47195.html

上一篇: filters in Rails controller and concerns

下一篇: Rails engine concerns autoload paths