ruby on rails - sirve - ¿Cómo presento una excepción en Rails para que se comporte como las otras excepciones de Rails?
ruby on rails tutorial español (3)
Me gustaría plantear una excepción para que haga lo mismo que una excepción normal de Rails. Especialmente, muestre la excepción y la pila en el modo de desarrollo y muestre la página "Lo sentimos, pero algo salió mal" en el modo de producción.
Intenté lo siguiente:
raise "safety_care group missing!" if group.nil?
Pero simplemente escribe "ERROR signing up, group missing!"
al archivo development.log
No tienes que hacer nada especial, simplemente debería estar funcionando.
Cuando tengo una nueva aplicación de rieles con este controlador:
class FooController < ApplicationController
def index
raise "error"
end
end
e ir a http://127.0.0.1:3000/foo/
Estoy viendo la excepción con un rastro de pila .
Es posible que no vea toda la pila en el registro de la consola porque Rails (desde 2.3) filtra las líneas del rastreo de pila que provienen del propio marco.
Ver config/initializers/backtrace_silencers.rb
en su proyecto Rails
Puedes hacerlo así:
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
Lo que estás haciendo aquí es crear una clase "NotActivated" que servirá como Exception. Usando raise, puedes lanzar "NotActivated" como una excepción. rescue_from es la forma de atrapar una excepción con un método específico (no activado en este caso). Un buen ejemplo, pero debería mostrarte cómo funciona.
Los mejores deseos,
fabianista
Si necesita una forma más sencilla de hacerlo, y no quiere mucho alboroto, una simple ejecución podría ser:
raise Exception.new(''something bad happened!'')
Esto generará una excepción, digamos e
con e.message = something bad happened!
y luego puedes rescatarlo ya que estás rescatando todas las demás excepciones en general.