2016-04-07 52 views
0

我对过滤器之前的应用程序控制器和过滤器之前的用户控制器之间的过滤器执行顺序感到困惑。设置作用域控制器和应用程序控制器的过滤器之前的优先顺序

class ApplicationController < ActionController::Base 
    befor_filter :check_me 

    def check_me 
    puts "checked!" 
    end 
end 


class UsersController < ApplicationController 
    before_filter :authenticate_user! 
end 

我认为应该执行check_me然后authenticate_user!。但事实并非如此。这里的顺序是什么?

回答

1

当我们在层次结构中时,回调被追加。

这意味着UsersController回调将首先出现,然后ApplicationController

执行的顺序是:

  1. authenticate_user!
  2. check_me

如果要更改优先级,再加入prepend_before_filter

实施例:prepend_befor_filter :check_me

参见:What order do before filters occur in?

+0

感谢。但是我的例子'prepend_befor_filter'没有工作。 –

+0

尝试使用'prepend_before_action'来代替。 prepend_before_filter的弃用声明:https://github.com/josevalim/rails-footnotes/issues/141 – dp7

相关问题