Я хотел бы вызвать исключение, чтобы оно делало то же самое, что и обычное исключение Rails. В частности, покажите исключение и трассировку стека в режиме разработки и покажите страницу «К сожалению, что-то пошло не так» в рабочем режиме.
Я пробовал следующее:
raise "safety_care group missing!" if group.nil?
Но он просто записывает "ERROR signing up, group missing!"
в файл development.log
ruby-on-rails
exception
exception-handling
Чираг Патель
источник
источник
Ответы:
Ничего особенного делать не надо, просто должно работать.
Когда у меня есть новое приложение 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, который будет служить исключением. Используя рейз, вы можете выбросить NotActivated как исключение. rescue_from - это способ перехвата исключения с помощью указанного метода (в данном случае not_activated). Довольно длинный пример, но он должен показать вам, как это работает.
С наилучшими пожеланиями,
Фабиан
источник
Если вам нужен более простой способ сделать это и не нужно много суеты, простое выполнение может быть таким:
raise Exception.new('something bad happened!')
Это вызовет исключение, скажем,
e
сe.message = something bad happened!
а затем вы можете спасти его, как и все остальные исключения в целом.
источник