2016-07-19 5 views
0

私はこれと数時間戦っています。ページをレンダリングしてから例外を自動的に発生させるコントローラアクションがあります。私はこれについて多くの情報を見つけることができず、私が間違ったことを探していると思うようになりました。Railsコントローラでレンダリングと例外を発生させる可能性がありますか?

次のようなものがありますか?

class UsersController < ActionController::Base 

    def new 
    # .. do stuff 
    begin 
     UserMailer::send_confirmation_link(@user) 
    rescue StandardError => e 
     render 'email_error' 
     raise(e) 
    end 
    # .. other stuff 
    end 

end 

この場合、エラーをエンドユーザーに通知し、アプリケーション自体で例外を発生させたいだけです。事実上のエラーページを変更することはできないことに注意してください。これは、より大きなアプリケーションを使用する同じコードベースでは、より小さいアプリケーションであるためです。

答えて

2

いいえ、どちらも例外を表示または発生させます。両方を行うことはできません。

のページには、例外のためにデフォルトでレンダリングされているものがあります。ユーザーが表示するすべての例外について、メッセージをカスタマイズすることができます。

また、特定の例外クラスの応答をカスタマイズするために使用できるrescue_fromメソッドがあります。例外応答がすべて配置されている中心点(通常はApplicationController)を持つのが良い方法です。

あなたのユースケースでこれをやっていた場合、あなたはおそらく、あなたのような、再調達する中、この例外をラップであろうと、RuntimeErrorのサブクラスを独自のカスタム例外クラスを望む:

rescue StandardError => e 
    raise EmailConfirmationError.new e.message 
end 

。 ..そしてあなたの中でApplicationController

rescue_from EmailConfirmationError { |e| render "email_error" } 
関連する問題