before_filterで後続をキャンセル

Ruby on Railsの話。コントローラでbefore_filterを複数定義すると、定義された順番に呼ばれる。before_filterの典型的な使い方は、認証のチェックだったり渡された値のチェックだったり。で、チェックに引っかかった場合はエラーとする。

例えば3つのbefore_filterを定義していたとして、1つめのフィルターでチェックに引っかかった場合、後続のフィルターは処理する必要がない。その場合、フィルターがfalseを返すようにすると後続のフィルターが実行されない。

class FooController < ApplicationController
before_filter :filter1
before_filter :filter2
def filter1
if !check_something1
redirect_to error_page1
return false
end
end
# filter1がfalseの場合は実行されない
def filter2
if !check_something2
redirect_to error_page2
return false
end
end
end

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です