2011-07-25 18 views
20

W moim Rails 2.3.8 wniosku miałem kod rescue_from wyjątki, które są wyrzucane podczas działań javascript:Rescue_from dla javascript żąda

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 

Więc moi użytkownicy otrzymują komunikat o błędzie, jeśli wywołanie ajax wpada błąd. W Railsach 3, nie mogę po prostu wywołać domyślnej obsługi błędów, ponieważ metoda "without_handler" już nie istnieje.

aktualizacja doh

napisałem to po 3 godzinach poszukiwań, ale tylko 30 minut po wysłaniu znalazłem rozwiązanie siebie.

Wystarczy ponownie podnieść wyjątek.

Ponieważ obsługa błędów nie jest obsługiwana z tym wyjątkiem.

+0

Dziękujemy za opublikowanie rozwiązania. –

+0

Tks koleś! pomógł mi: P – danilodeveloper

+0

Zlokalizowany, aby nie było wątpliwości, czy odpowiedź jest połową tego słowa. – random

Odpowiedz

1

Wystarczy zmienić wyjątek.

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/ Zgadza:

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

[...] Wyjątkiem jest prawidłowo rethrown ale nie jest przechwycony [sic] przez standardowe Rails mechanizmu ratunkowego a standardowa strona wyjątków nie jest renderowana.

+1

Meta-komentarz: Publikuję to, ponieważ, cóż, nikt inny nie ma. – michaelb958

Powiązane problemy