Méthodes de limitation du format de rendu Rails au format html
J'ai un Rails 2.1.2 site qui n'a que des modèles html par exemple les travaux.html.erb, donc quand je demande une bonne ressource:
www.mysite.com/jobs/1
Il rend mon travail en html, cependant, si je demande:
www.mysite.com/jobs/1.xml
J'obtiens l'erreur:
Modèle est manquant Manquant modèle
l'emploi/spectacle.xml.erb dans le chemin de la vue
c:/espace de travail/monsite/app/views
Ce qui est pire, c'est que je peux aussi demander quelque chose comme
www.mysite.com/jobs/1.xyz
Et en effet je vois l'erreur:
Modèle est manquant Manquant modèle
l'emploi/spectacle.xyz.erb dans le chemin de la vue
c:/espace de travail/monsite/app/views
À strictement présenter du contenu html, ce qui est la plus propre et la plus simple façon de dire les Rails que je ne veux pas rendu rien d'autre que .html.erb fichiers.
Il est important de noter que:
- Certaines de mes actions de contrôleur de contenir conditionnelle appels à la méthode render() tandis que d'autres utilisent la valeur par défaut de Rails de comportement c'est à dire si vous n'appelez pas de render (), alors le modèle nommé youraction.html.erb sera rendue.
- Mon code n'utilise pas le responds_to() la méthode
Ce serait formidable si la solution n'était pas à l'rendu/responds_to niveau que je dois modifier un nombre significatif d'actions. Peut-être il y a un moyen de configurer les Rails de sorte que seuls les modèles html sont rendus?
source d'informationauteur Tetsuo
Vous devez vous connecter pour publier un commentaire.
Si vous ne souhaitez pas utiliser responds_to, vous pouvez le faire:
Qui sera exécuté avant toutes les demandes et ne laissent passer que ceux qui ne spécifient pas de format ou de spécifier le format html par. Tous les autres se 404. Vous pouvez créer un public/406.html si vous voulez retourner à la 406 n'est pas acceptable.
Dans vos routes, vous pouvez simplement supprimer la ligne:
Et l' ".xyz" n'est plus acheminé, entraînant des erreurs 404/.
Vous pouvez utiliser des Rails de Par l'Action d'Écraser fonctionnalité. Qu'est-ce? --> Il est également possible de remplacer la norme de ressources de la manipulation par le passage d'un bloc à respond_with la spécification des formats de remplacer pour qui l'action:
:sauf :seules les Options
Vous pouvez également passer :sauf :seules options pour prendre en charge uniquement les formats pour des actions spécifiques (comme vous le faites avec before_filter):
L' :n'importe quel Format
Si vous avez toujours souhaitez utiliser respond_to dans vos actions individuelles, l'utilisation de l' :tout format de la ressource qui peut être utilisé comme un caractère générique correspondant à l'un quelconque des formats:
Ben la solution fonctionne.
Envisager la responds_to solution. C'est plus propre, car il permet une certaine souplesse quand vous aurez inévitablement besoin d'ouvrir une action en JavaScript, json ou xml appel. Ensuite, vous n'aurez pas à ajouter
Personnellement, j'aime la respond_to bloc; c'est très descriptif.
N'importe quel format n'est pas spécifié dans le bloc automatiquement provoquer un HTTP 406 Pas Acceptable d'être renvoyé. C'est gentil.
J'étais non-sensiques demandes pour le format d'image sur des fichiers HTML, triggerring un 500 avec
MissingTemplate
. Je édictées à la fin de mon action:Et maintenant, au lieu d'obtenir les rapports d'erreur, nous émettons une 406 à qui perçant demandeur.