before_filterの実行順番について
before_filterで複数のメソッドを指定した場合、指定した順番で実行されます。
考えてみれば、当たり前だ(´・ω・`)
以前に作ったSNSアプリで、足あととアクセス拒否機能があった訳なんですが、
以下のように記述されていました。
class HogeController < ApplicationController before_filter :footprint, :refuse private # 足あと def footprint end # アクセス拒否 def refuse end end
上記のようにbefore_filterを記述すると、
足あとをつけて、アクセス拒否するという流れで処理されるため、
必ず、足あとがつくという結果に・・・
(もちろん、アクセス拒否している場合は、足あとはついて欲しくないわけです)
ということでこの場合は、refuseが先に実行されるように記述する必要があります。
また、before_filterで後続のメソッドを実行させたくない場合、
render, redirect_toメソッドでレスポンスを作るか、return falseすることで、
対応します。
class HogeController < ApplicationController before_filter :refuse, :footprint # refuseを先に private # 足あと def footprint end # アクセス拒否 def refuse if refuse? # 拒否専用ページをレンダリング render 'layouts/refuse.html.erb', :layout => true end end end
以上で、対応完了。