OK, ich versuche, die Best Practices für die CREATE- und UPDATE-Methoden für HTML- und XML-Formate zu verstehen. Der Standardcode für einen Controller, den der Rails- Generator generiert, ist mir etwas unklar.Rails Best Practices für RESTful-Controller CREATE- und UPDATE-Methoden
Für die Methode CREATE, da ein guter sparen, sagt der Generator auf "redirect_to (@whatever)" für HTML und "machen: xml => @whatever,: status =>: erstellt: location = > Was auch immer "für XML.
Bei einem schlechten sparen, sagt der Generator auf "machen: action => 'new'" für HTML und "machen: xml => @ whatever.errors,: status =>: unprocessable_entity" für XML .
jedoch für die Update-Methode, ein gutes Update gegeben, sagt der Generator auf "redirect_to (@whatever)" für HTML und "Kopf: ok" für XML.
Und, da eine schlechte Update, sagt der Generator auf "machen: action => 'bearbeitet'" für HTML und "machen: xml => @ whatever.errors,: status =>: unprocessable_entity" für XML.
ich das verstehen, und es macht Sinn für mich, und funktioniert gut - ABER, ich habe zwei Fragen:
Zunächst für eine erfolgreiche Erstellen und Aktualisieren von HTML-Format, warum "redirect_to (@whatever) "statt" render: action => 'show' "? Ich verstehe die Unterschiede zwischen Redirect und Render, nur mehr neugierig darüber, auf welche Art und Weise Sie es tun und warum. Es scheint, die Weiterleitung wäre eine unnötige zusätzliche Reise für den Browser zu machen.
Zweitens, warum "Kopf: ok" nach dem erfolgreichen Update über XML, aber "machen: xml => @whatever,: status =>: erstellt: location => @whatever" bei erfolgreicher CREATE über XML? Dies scheint mir widersprüchlich zu sein. Scheint so, als ob ein erfolgreiches UPDATE via XML dasselbe wäre wie ein erfolgreiches CREATE via XML. Scheint so, als müssten Sie das neue/aktualisierte Objekt zurückgeben, damit Sie es testen können. Wie macht ihr das und warum?
Ich stimme Ihren Antworten auf den zweiten Teil meiner Frage zu. Und deine Antworten auf den ersten Teil meiner Frage machen Sinn, aber das wirft eine andere Frage auf: Warum wird nach einem erfolglosen Erstellen oder Aktualisieren Render verwendet und nicht redirect_to aus den gleichen Gründen, die du erwähnt hast? Was wäre, wenn Nutzer die Bearbeitung oder neue Seite als Lesezeichen speichern möchten? Wenn das Rendern verwendet wurde, würden sie immer noch auf der Seite "/ whatevers" sein (was falsch ist). – Buddy
Wenn der Benutzer zur Aktion "new/edit" umgeleitet wurde, gingen alle übergebenen POST-Daten verloren und das gerenderte Formular wäre leer. Sie haben Recht, dass der Benutzer die gerenderte Fehlerseite als Lesezeichen speichern könnte und auf die falsche URL verweisen würde. Keine Möglichkeit, dieses AFAIK zu verhindern. – Sidane
Oh ja, duh. Ich dachte fälschlicherweise, du könntest auf die neue oder bearbeitete Seite umleiten und ein @ -Objekt übergeben. Ich habe mich geirrt. Danke, dass du mich richtig gestellt hast! – Buddy