filters in Rails controller and concerns
I have a Rails concern defined as follows:
module MyConcern
extend ActiveSupport::Concern
included do
before_filter :filter_inside_concern
end
def filter_inside_concern
# ...
end
end
and I have a before_filter also on the controller layer:
class MyController < ApplicationController
before_filter :filter_inside_controller
end
If I include MyConcern inside MyController , does the order in which the before filters are called dependent on how the code is arranged? For example, if we have
class MyController < ApplicationController
include MyConcern
before_filter :filter_inside_controller
end
Does filter_inside_concern gets called before filter_inside_controller (or vice versa)?
Thank you!
I have recreated your situation and find out sequence of execution depends on sequence in which you write both filters.
if you write
include MyConcern
before_filter :filter_inside_controller
concern filter will execute first
or if you write filters in this sequence
before_filter :filter_inside_controller
include MyConcern
controller filter will execute first
If you use:
class MyController < ApplicationController
include MyConcern
before_filter :filter_inside_controller
end
filter_inside_concern will get called before filter_inside_controller
If you want to have filter_inside_controller called before filter_inside_concern , you need to use prepend_before_filter instead:
class MyController < ApplicationController
include MyConcern
prepend_before_filter :filter_inside_controller
end
As a side note, before_filter and prepend_before_filter will be deprecated. You should use before_action and prepend_before_action instead.
上一篇: 如何测试由Rails Controller Concern添加的路由
下一篇: 过滤Rails控制器和关注点
