Как создать исключение в Rails, чтобы оно вело себя как другие исключения Rails?
Я хотел бы поднять исключение, чтобы оно делало то же самое, что и обычное исключение Rails. В частности, покажите исключение и трассировку стека в режиме разработки и покажите страницу "мы сожалеем, но что-то пошло не так" в рабочем режиме.
я попробовал следующий:
raise "safety_care group missing!" if group.nil?
но он просто пишет "ERROR signing up, group missing!" для развития.файл журнала
3 ответов:
вы не должны делать ничего особенного, он должен просто работать.
когда у меня есть новое приложение rails с этим контроллером:
class FooController < ApplicationController def index raise "error" end endи перейти к
http://127.0.0.1:3000/foo/Я видя исключение с трассировкой стека.
вы можете не увидеть весь stacktrace в журнале консоли, потому что Rails (начиная с 2.3) фильтрует строки из трассировки стека, которые поступают из самой структуры.
посмотреть
config/initializers/backtrace_silencers.rbin ваш проект 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", который будет служить исключением. Используя raise, вы можете бросить "NotActivated" в качестве исключения. rescue_from-это способ отловить исключение с помощью указанного метода (в данном случае not_activated). Довольно длинный пример, но он должен показать вам, как это работает.
С наилучшими пожеланиями,
Фабиан
Если вам нужен более простой способ сделать это, и не хотите много суеты, простое выполнение может быть:
raise Exception.new('something bad happened!')это вызовет исключение, скажем
eСe.message = something bad happened!и тогда вы можете спасти его, как вы спасаете все другие исключения в целом.
Comments