20

私の Rails 2.3.8 アプリケーションには、javascript アクション中にスローされる例外用の rescue_from コードがありました。

rescue_from ::Exception, :with => :show_js_errors

...

def show_js_errors exception
  if request.format == :js
    flash[:error] = 'some error occured'
    render :update do |page|
      page.redirect_to({:controller => '/home', :action => :index})
    end
  else
    # use default error handling for non-JS requests
    rescue_action_without_handler(exception)
  end
end

そのため、ajax 呼び出しでエラーが発生した場合、ユーザーはエラー メッセージを受け取ります。Rails 3 では、「without_handler」メソッドが存在しなくなったため、単純にデフォルトのエラー処理を呼び出すことはできません。

アップデート _

3 時間の検索の後にこれを投稿しましたが、投稿してからわずか 30 分後に自分で解決策を見つけました。

例外を再発生させるだけです。

エラー処理中のため、この例外ではそれ以上の処理は行われません。

4

1 に答える 1

1

例外を再発生させるだけです。

def show_js_errors exception
  if request.format == :js
    flash[:error] = 'some error occured'
    render :update do |page|
      page.redirect_to({:controller => '/home', :action => :index})
    end
  else
    raise # <<
  end
end

http://simonecarletti.com/blog/2009/11/re-raise-a-ruby-exception-in-a-rails-rescue_from-statement/同意:

rescue_from ActiveRecord::StatementInvalid do |exception|
  if exception.message =~ /invalid byte sequence for encoding/
    rescue_invalid_encoding(exception)
  else
    raise
  end
end

[...]例外は正しく再スローされますが、標準の Rails レスキュー メカニズムによって[sic]キャッチされず、標準の例外ページがレンダリングされません。

于 2014-02-10T22:12:00.403 に答える