通常のRails例外と同じことを行うように、例外を発生させたいと思います。特に、開発モードで例外とスタックトレースを表示し、本番モードで「申し訳ありませんが、何か問題が発生しました」ページを表示します。
私は次を試しました:
raise "safety_care group missing!" if group.nil?
ただし、単に"ERROR signing up, group missing!"
をdevelopment.logファイルに書き込みます
特別なことをする必要はありません。それはただ機能しているはずです。
このコントローラーを備えた新しいRailsアプリがある場合:
class FooController < ApplicationController
def index
raise "error"
end
end
http://127.0.0.1:3000/foo/
に移動します
スタックトレースで例外が発生しています。
Rails(2.3以降) フレームワーク自体からのスタックトレースから行をフィルタリングします。
Railsプロジェクトのconfig/initializers/backtrace_silencers.rb
を参照してください
次のようにできます:
class UsersController < ApplicationController
## Exception Handling
class NotActivated < StandardError
end
rescue_from NotActivated, :with => :not_activated
def not_activated(exception)
flash[:notice] = "This user is not activated."
Event.new_event "Exception: #{exception.message}", current_user, request.remote_ip
redirect_to "/"
end
def show
// Do something that fails..
raise NotActivated unless @user.is_activated?
end
end
ここで行っているのは、例外として機能する「NotActivated」クラスを作成することです。 raiseを使用すると、「NotActivated」を例外としてスローできます。 rescue_fromは、指定されたメソッド(この場合はnot_activated)で例外をキャッチする方法です。かなり長い例ですが、どのように機能するかを示す必要があります。
ご多幸を祈る、
ファビアン
より簡単な方法が必要で、大騒ぎしたくない場合は、次のように簡単に実行できます。
raise Exception.new('something bad happened!')
これにより、例外が発生します。たとえば、e
with e.message = something bad happened!
そして、一般的に他のすべての例外を救出しているので、それを救うことができます。