アクションを直リン禁止にする

DBから画像データをsend_dataするような、ビューから呼び出すからpublicにしなきゃらなんけど、
外から直リンさせたくない、ような関数ってどうやって指定するのかなぁと探したんですが、
見当たらなかったので実装してみました。

def tyokurin_notallowdalbe
  ref = @request.env["HTTP_REFERER"]
  unless ref.to_s =~ /#{@request.host.to_s}/
    flash[:notice] = "直リンできません。"
    redirect_to :action=>"index"
    return;
  end
end

そんで

before_filter :tyokurin_notallowdalbe, :only=>:draw

してやれば、オッケーのようです。

      • 2月5日追記---

同じようなことはActionPackに最初っからついてるhide_actionでもできるようです。
publicインスタンスメソッドをアクションとして認識しないようにするものですが、
コイツだとビューから@pict.drawのように呼び出せても、:action=>:drawのように
間接的に呼び出すのはできないっぽいです。