Rails 1.9(?)から2.3.11に最近アップグレードしたアプリでフィルターが機能する前に取得するのに問題があります。コントローラ:
before_filter :false_filter
およびapplication_controller.rbに次のようにします。
def false_filter
puts "false filter running"
false
end
次に、cucumber/webratまたはブラウザのいずれかからメソッドを呼び出します。フィルターが呼び出されている間(putsがメッセージを出力しているのを確認できます)、フィルターチェーンは終了していません。
生成されていない定型的なコードがあるかどうか疑問に思っています。誰がどこを見ればよいか提案できますか?
フィルター前の戻り値に注意を払うものはありません。処理を停止したい場合は、フィルターから何かをレンダリングするか、別の場所にリダイレクトする必要があります ファインガイドから :
Beforeフィルターがレンダリングまたはリダイレクトする場合、アクションは実行されません。そのフィルターの後に実行するようにスケジュールされた追加のフィルターがある場合、それらもキャンセルされます。
同じテキストが 5.2.0ガイド に表示されます。
この動作は理にかなっています。フィルターチェーンが完了しない場合(つまり、途中でフィルター処理を停止する場合)、コントローラーメソッドを呼び出しますが、予期しない方法で設定すると、痛みが発生します。 、苦しみ、混乱、そしてそれはまったく友好的でも楽しいことでもありません。