Я хотел бы повысить исключение так, чтобы оно сделало то же самое, которое делает нормальное исключение направляющих. Особенно, покажите исключение и отслеживание стека в режиме разработки и покажите страницу "We are sorry, but something went wrong" в производственном режиме.
Я попробовал следующее:
raise "safety_care group missing!" if group.nil?
Но это просто пишет "ERROR signing up, group missing!"
в файл development.log
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
Вы можете сделать это так:
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). Довольно длинный пример, но он должен показать вам, как это работает.
С наилучшими пожеланиями,
Фабиан