5

Ceci est mon premier post ici, donc j'espère que je posterai cette question au bon endroit. Sinon, s'il vous plaît faites le moi savoir pour que je sais pour la prochaine fois que je poste ici :)Ruby on Rails erreur -HTTP manipulation

Je travaille sur un site Web RoR et voudrais gérer les erreurs de serveur (400, 404, 500, etc.) individuellement. En outre, puisque le site Web est dynamique, je voudrais gérer les erreurs dans l'environnement des rails plutôt qu'au niveau du serveur. Un exemple de ce que je voudrais faire pourrait être de présenter l'utilisateur avec du matériel facultatif ou une barre de recherche quand elle heurte une page ou un modèle qui ne chargera pas ou n'existera tout simplement pas.

Je suis nouveau à RoR alors s'il vous plaît nu avec moi au cas où je me demande ce qui est évident.

Alors, je l'ai fait un peu de lecture et je pense que l'utilisation du gestionnaire d'exceptions rescue_from est la voie à suivre dans mon cas. (Serait plus qu'heureux d'entendre si l'un d'entre vous a une opinion différente).

J'ai simple prototype (voir code ci-dessous) et en cours d'exécution, cependant, je reçois une erreur lorsque j'inclus le gestionnaire d'exception suivante au code:

rescue_from ActionController::MissingTemplate,   :with => :not_found #404 

Maintenant, je ne vois pas que j'ai une faute d'orthographe et j'ai vu cette ligne dans le code posté sur le web. Cependant, quand je l'inclus je reçois l'erreur de routage suivant:

Routing Error No route matches "/errorhandle" with {:method=>:get} 

Je travaille sur des rails 2.3.5, peut-être qui a quelque chose à voir avec elle?

J'espère que vous pouvez me aider à faire la lumière sur cette question.

À la votre! /Maja

class ApplicationController < ActionController::Base 

    helper :all # include all helpers, all the time 

    protect_from_forgery #See ActionController::RequestForgeryProtection for details 

    #ActiveRecord exceptions 
    rescue_from ActiveRecord::RecordNotFound, :with => :not_found #400 

    #ActiveResource exceptions 
    rescue_from ActiveResource::ResourceNotFound, :with => :not_found #404 

    #ActionView exceptions 
    rescue_from ActionView::TemplateError, :with => :not_found #500 

    #ActionController exceptions 
    rescue_from ActionController::RoutingError, :with => :not_found #404 

    rescue_from ActionController::UnknownController, :with => :not_found #404 

    rescue_from ActionController::MethodNotAllowed, :with => :not_found #405 

    rescue_from ActionController::InvalidAuthenticityToken, :with => :not_found #405 

    rescue_from ActionController::UnknownAction, :with => :not_found #501 

    # This particular exception causes all the rest to fail.... why? 
    # rescue_from ActionController::MissingTemplate, :with => :not_found #404 

    protected 
    def not_found 
     render :text => "Error", :status => 404 
    end 

    # Scrub sensitive parameters from your log 
    # filter_parameter_logging :password 
end 
+1

Pouvez-vous nous montrer les routes pertinentes de routes.rb, le cas échéant? – Trevoke

+0

Bien sûr Trevoke, merci pour la réponse rapide. Je n'ai rien ajouté à routes.rb donc je suppose que c'est à peu près le standard. fichier: ActionController :: Routing :: Routes.draw faire | carte | map.resources: errorhandlers # ... # beaucoup de lignes commentées # ... map.connect ': controller /: action /: id' map.connect « : contrôleur /: action/: id:. Format » fin –

+0

euh, ne savez pas comment faire le commentaire semble agréable et bien rangé * uark *. espère qu'il lisible ... de toute façon –

Répondre

2

un coup d'œil ceux-ci: http://www.ruby-forum.com/topic/47898

http://henrik.nyh.se/2008/09/404-invalid-rails-format

En particulier, un poste dans le premier lien:

You can't use a regular 'rescue' keyword to rescue MissingTemplate exception.

Use rescue_action instead, for example:

def rescue_action(exception) 
    if ::ActionController::MissingTemplate === exception 
    render :text => 'rescued' 
    else 
    super 
    end 
end 

Kent.

+0

Merci beaucoup Kent pour votre réponse et les liens, ils ont tous été très utiles.Je vais lire sur le :: et la gestion des exceptions générales dans RoR pour mieux comprendre votre réponse. ... et puis je pourrais jeter quelques autres questions là-bas si cela ne vous dérange pas? Pour l'instant - grâce à vous tous, c'est génial de faire partie d'un forum aussi actif! /Maja –

+0

Je ne suis pas Kent - Kent est celui qui a répondu à cette question dans le premier lien :-) Vous êtes les bienvenus. Par tous les moyens, poser plus de questions, c'est à quoi sert ce site! (Il suffit de lire le doc en premier, bien sûr). – Trevoke