过滤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
来代替。