tutorial sirve sintaxis rails que para mundo hola español ejemplos curso comandos caracteristicas ruby-on-rails exception exception-handling

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.