2016-04-07 8 views
0

フィルタ前のアプリケーションコントローラとフィルタ前のユーザコントローラの間で、beforeフィルタの実行順序が混乱します。スコープコントローラとアプリケーションコントローラのフィルタの前に優先順位をつける

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

関連する問題