if_found メソッドを本格的に考えてみる

コード

def if_found(obj, msg = "デフォルトのエラーメッセージ", action = "index", controller = controller_name)
  if obj
    yield if block_given?
  else
    flash[:error] = msg
    redirect_to :controller => controller, :action => action
  end
end

使い方

まずは action_controller に上のメソッドを記述します。実際の利用方法は以下のとおり。

if_found(@item = Item.find(params[:id])) do
  # 何らかの処理、ブロックを使わないなら do から end まで省略
end

ポイント

妙な ID が指定された場合などの処理を一括で定義可能。リダイレクト先やエラーメッセージも指定可能で、大体の場合飛ばす先はここだろうというアクションをデフォルトで指定。
自分で使う分にはこれで十分なのですが、何か改良案などあれば教えて頂きたいです。

出典

もともとのアイディアは以下の書籍に載っていたサンプルコードからの引用です。本の内容とはあまり関係ない部分なので、悪しからず。