Methoden für die Begrenzung der Schienen Rendern in html-format
Ich habe eine Rails 2.1.2 Website, nur html-templates, z.B. jobs.html-Code.erb, also, wenn ich den Antrag für einen erholsamen Ressource:
www.mysite.com/jobs/1
Macht es meinen job in html, aber wenn ich Anfrage:
www.mysite.com/jobs/1.xml
Bekomme ich die Fehlermeldung:
Vorlage fehlt Fehlt Vorlage
jobs/zeigen.xml.erb in Aussicht Pfad
c:/workspace/mysite/app/views
Was noch schlimmer ist, ist, dass ich auch etwas fordern wie
www.mysite.com/jobs/1.xyz
Und in der Tat sehe ich den Fehler:
Vorlage fehlt Fehlt Vorlage
jobs/zeigen.xyz.erb in Aussicht Pfad
c:/workspace/mysite/app/views
Zu grundsätzlich vorhanden, nur html-Inhalte, was ist die sauberste und einfachste Weg, zu sagen Schienen, dass ich nicht Rendern möchten, alles andere als .html-Code.erb-Dateien.
Es ist wichtig zu beachten, dass:
- Einige meiner controller-Aktionen enthalten bedingte Aufrufe von render () - Methode, während andere verwenden den Standard-Schienen Verhalten, also wenn Sie nicht anrufen render() dann die Vorlage mit dem Namen youraction.html-Code.erb gerendert werden.
- Mein code nicht der responds_to () - Methode
Wäre es toll, wenn die Lösung nicht an die render - /responds_to Niveau, als würde ich ändern müssen, um eine erhebliche Anzahl von Maßnahmen. Gibt es vielleicht eine Möglichkeit zu konfigurieren Schienen, so dass nur html-templates gerendert werden?
InformationsquelleAutor Tetsuo | 2009-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht möchten, zu verwenden responds_to, können Sie dies tun:
Ausgeführt wird, bevor alle Anforderungen und lassen nur diejenigen, die nicht format festlegen, oder angeben, dass das html-format durch. Alle anderen Holen 404 würde. Können Sie erstellen, public/406.html wenn Sie zurückkehren möchten, 406 nicht akzeptabel.
404.html
als 200 Antwort. Müssen Sie:status => 404
(oder:status => :not_found
). Ebenso für einen 406, die Sie verwenden möchten:status => 406
(oder:status => :not_acceptable
).Dies schlägt auch dann fehl, wenn der Antrag verwendet den 'accept' - header zu verlangen, die Antwort geben, da das nicht gespeichert params
InformationsquelleAutor Ben
Ihre Routen können Sie einfach entfernen Sie die Zeile:
Und das ".xyz" wird nicht mehr weitergeleitet werden, was in 404-Fehlern/.
InformationsquelleAutor Toby Hede
Können Sie verwenden, Schienen Pro-Aktion Überschreiben Funktion. Was ist das? --> Es ist auch möglich zum überschreiben der standard-Ressource-handling durch die übergabe in einem block zu respond_with, die angeben, welche Formate überschreiben für diese Aktion:
:außer Und :nur Optionen
Können Sie auch pass-in :außer und :nur Optionen unterstützt nur Formate, die für bestimmte Aktionen (wie du das machst mit before_filter):
: Jedes Format
Wenn Sie noch verwenden möchten respond_to in Ihre einzelnen Handlungen, die :jede Ressource format kann verwendet werden als wildcard-match gegen alle nicht angegebenen Formate:
Jared, könnten Sie bitte etwas konkreter, welche der drei Optionen ist Rails 3! Ich bin auf Schienen läuft 2.3.4 und das :jede Option funktioniert.
InformationsquelleAutor leviathan
Ben ' s Lösung funktioniert.
Betrachten die responds_to Lösung, obwohl. Es ist sauberer, denn es ermöglicht Flexibilität, wenn Sie zwangsläufig öffnen müssen, um eine Aktion für ein JavaScript-json-oder xml-rufen. Dann werden Sie nicht haben, hinzufügen
Mir persönlich gefällt der respond_to-block; es ist sehr anschaulich.
Beliebigen format nicht angegeben wird der block automatisch Ursache ein HTTP 406-Nicht Annehmbar ist, zurückgegeben werden. Das ist schön.
InformationsquelleAutor Jonathan Julian
War ich immer nicht unsinnige Anfragen für Bild-format, HTML-Dateien, triggerring 500 mit
MissingTemplate
. Ich edicted die folgenden am Ende meiner Aktion:Und nun, statt immer Fehler meldet, geben wir einen 406 zu, dass mischievious requester.
InformationsquelleAutor Jonathan Allard