我对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
如果我在MyConcern
中包含MyController
,那么调用before过滤器的顺序是否取决于代码的排列方式?例如,如果我们有
class MyController < ApplicationController
include MyConcern
before_filter :filter_inside_controller
end
在filter_inside_concern
之前调用filter_inside_controller
(反之亦然)?
谢谢!
答案 0 :(得分:2)
我重新创建了你的情况,并找出执行顺序取决于你编写两个过滤器的顺序。
如果你写
include MyConcern
before_filter :filter_inside_controller
关注过滤器将首先执行
或者如果按此顺序编写过滤器
before_filter :filter_inside_controller
include MyConcern
控制器过滤器将首先执行
答案 1 :(得分:1)
如果您使用:
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
代替。