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