Как создать исключение в Rails, чтобы оно вело себя как другие исключения Rails?



Я хотел бы поднять исключение, чтобы оно делало то же самое, что и обычное исключение Rails. В частности, покажите исключение и трассировку стека в режиме разработки и покажите страницу "мы сожалеем, но что-то пошло не так" в рабочем режиме.



я попробовал следующий:



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


но он просто пишет "ERROR signing up, group missing!" для развития.файл журнала

597   3  

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.rb in ваш проект 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

    Ничего не найдено.