Warum muss im RESTful-Controller eine neue Methode definiert und anschließend eine Erstellungsmethode erstellt werden?
Die Google-Suche hat mir nicht die Antwort gegeben, nach der ich gesucht habe. Ich verstehe den Unterschied, muss aber wissen, warum sie so verwendet werden, wie sie sind.
quelle
Aus der ActiveRecord :: Base- Dokumentation:
create (Attribute = Null) {| Objekt | ...}
neu (Attribute = nil) {| self wenn block_given? | ...}
So
create
instanziiert das neue Objekt, überprüft sie und speichert sie dann in die Datenbank. Erstelltnew
nur das lokale Objekt, versucht jedoch nicht, es zu validieren oder in der Datenbank zu speichern.quelle
New instanziiert eine neue Model-Instanz, wird jedoch erst gespeichert, wenn die Speichermethode aufgerufen wird.
Create macht das Gleiche wie new, speichert es aber auch in der Datenbank.
Manchmal möchten Sie Dinge tun, bevor Sie etwas in der Datenbank speichern, manchmal möchten Sie es einfach erstellen und sofort speichern.
quelle
Die RESTful-Teile von Rails sind so ähnlich wie das HTTP-Protokoll. Im HTTP-Protokoll darf eine GET-Anforderung keine Daten ändern. Wenn Sie sich die Funktionsweise aller RESTful-Aktionen in Rails ansehen, stimmen sie logischerweise mit HTTP-Aktionen überein. Ein POST dient zum Generieren neuer Daten und wird daher logisch erstellt. Sie verwenden ein GET, um die Formularversion dieser oder mit anderen Worten die neue Aktion bereitzustellen. Index und Show sind ebenfalls GETs, Update ist ein PUT (oder PATCH in Rails 4+) und Destroy ist ein DELETE in HTTP.
Darüber hinaus wird die Logik in der Steuerung gut voneinander getrennt und Sie können problemlos mit Fehlern umgehen (indem Sie die neue Aktion mit Fehlermeldungen erneut rendern).
quelle
"You use a GET to serve the form version of that or in other words, the new action"