过滤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_concern在filter_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_filter和prepend_before_filter将被弃用。 您应该使用before_action和prepend_before_action来代替。
