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

以上で、対応完了。