2011-07-25 14 views
20

En mis Rails 2.3.8 aplicación que tenía un código rescue_from excepciones, que son arrojados durante las acciones de javascript:Rescue_from JavaScript solicita

rescue_from ::Exception, :with => :show_js_errors 

... 

def show_js_errors exception 
    if request.format == :js 
    flash[:error] = 'some error occured' 
    render :update do |page| 
     page.redirect_to({:controller => '/home', :action => :index}) 
    end 
    else 
    # use default error handling for non-JS requests 
    rescue_action_without_handler(exception) 
    end 
end 

Así que mis usuarios reciben un mensaje de error, si una llamada AJAX se topa un error. En Rails 3, no puedo simplemente llamar al manejo predeterminado de errores, porque el método "sin_manejar" ya no existe.

actualización DOH

Me ha publicado esto después de 3 horas de búsqueda, pero sólo 30 minutos después de registrar he encontrado una solución a mí mismo.

Solo vuelva a presentar la excepción.

Dado que está en el manejo de errores, no se realiza ningún otro tratamiento con esta excepción.

+0

Gracias por publicar su solución. –

+0

Tks amigo! me ayudaste: P – danilodeveloper

+0

Localizado para que no haya dudas si la respuesta es la mitad – random

Respuesta

1

Simplemente vuelva a publicar la excepción.

def show_js_errors exception 
    if request.format == :js 
    flash[:error] = 'some error occured' 
    render :update do |page| 
     page.redirect_to({:controller => '/home', :action => :index}) 
    end 
    else 
    raise # << 
    end 
end 

http://simonecarletti.com/blog/2009/11/re-raise-a-ruby-exception-in-a-rails-rescue_from-statement/ de acuerdo:

rescue_from ActiveRecord::StatementInvalid do |exception| 
    if exception.message =~ /invalid byte sequence for encoding/ 
    rescue_invalid_encoding(exception) 
    else 
    raise 
    end 
end 

[...] La excepción se relanza correctamente pero no es apresado [sic] por el mecanismo y el rescate rieles estándar la página de excepción estándar no se representa.

+1

Meta-comentario: Estoy publicando esto porque, bueno, nadie más lo ha hecho. – michaelb958

Cuestiones relacionadas