2010年06月04日

Ruby on Rails 例外処理 rescue ensure

例外処理 rescue ensureとは?


rubyの例外処理といえば
begin .. rescue .. end

ですよね。
それのrescueとrescueの代わりにいれるensureです。

環境


rails1.2.6
ruby1.8.6
app/controllers/hoge_controller.rb

rescue


$ vi hoge_controller.rb
def hoge
 if hoge.blank?
   raise
  else
   raise
  end
end

見ての通りどうあがいてもエラーが起きる処理です。
では、例外が起きた時に違うところに飛ばしてみましょう。
$ vi hoge_controller.rb
def hoge
 begin
  if hoge.blank?
   raise
  else
   raise
  end
 rescue => e
 logger.error e
 redirect_to :action => "boge"
end

こうすることで、例外が起きた時にbogeに遷移させる事ができます。
ついでになぜエラーが出たのかをログに吐き出しています。

ensure


例外が起きた場合がrescueならばensureは?
答えは、例外が起きようが起きまいが処理を行うです。
$ vi hoge_controller.rb
def hoge
 begin
  if hoge.blank?
   puts 1111111
  else
   raise
  end
 ensure
  resirect_to :action => "boge"
end
end

ifが真であろうと偽であろうとbogeへ遷移します。
posted by RicK at 17:18| Comment(0) | TrackBack(0) | 日記