Как я повышаю исключение в направляющих, таким образом, оно ведет себя как другие исключения направляющих?

Я хотел бы повысить исключение так, чтобы оно сделало то же самое, которое делает нормальное исключение направляющих. Особенно, покажите исключение и отслеживание стека в режиме разработки и покажите страницу "We are sorry, but something went wrong" в производственном режиме.

Я попробовал следующее:

raise "safety_care group missing!" if group.nil?

Но это просто пишет "ERROR signing up, group missing!" в файл development.log

89
задан Chirag Patel 16 December 2009 в 22:49
поделиться

2 ответа

You don't have to do anything special, it should just be working.

When I have a fresh rails app with this controller:

class FooController < ApplicationController
  def index
    raise "error"
  end
end

and go to http://127.0.0.1:3000/foo/

I am seeing the exception with a stack trace.

You might not see the whole stacktrace in the console log because Rails (since 2.3) filters lines from the stack trace that come from the framework itself.

See config/initializers/backtrace_silencers.rb in your Rails project

133
ответ дан 24 November 2019 в 07:14
поделиться

Вы можете сделать это так:

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, который будет служить исключением. Используя рейз, вы можете выбросить NotActivated как исключение. rescue_from - это способ перехвата исключения с помощью указанного метода (в данном случае not_activated). Довольно длинный пример, но он должен показать вам, как это работает.

С наилучшими пожеланиями,
Фабиан

60
ответ дан 24 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: