例外を発生させて、通常のRails例外と同じことを行いたいと思います。特に、開発モードで例外とスタックトレースを表示し、プロダクションモードで「申し訳ありませんが、問題が発生しました」ページを表示します。
私は以下を試しました:
raise "safety_care group missing!" if group.nil?
しかし、それは単に"ERROR signing up, group missing!"
development.logファイルに書き込みます
例外を発生させて、通常の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以降)はフレームワーク自体からのスタックトレースからの行をフィルタリングするため、コンソールログにスタックトレース全体が表示されない場合があります。
config/initializers/backtrace_silencers.rb
Railsプロジェクトで見る
あなたはこのようにそれを行うことができます:
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
とe.message = something bad happened!
そして、一般的に他のすべての例外を救出しているので、それを救うことができます。