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控制器和关注点