Obwohl es richtig ist, dass create
Aufrufe new
und dann save
gibt es einen großen Unterschied zwischen den beiden Alternativen in ihren Rückgabewerten.
Save
Gibt entweder true
oder false
abhängig davon zurück, ob das Objekt erfolgreich in der Datenbank gespeichert wurde oder nicht. Dies kann dann zur Flusskontrolle gemäß dem ersten Beispiel in der obigen Frage verwendet werden.
Create
gibt das Modell zurück, unabhängig davon, ob das Objekt gespeichert wurde oder nicht. Dies hat Auswirkungen auf den obigen Code, da der oberste Zweig der if
Anweisung immer ausgeführt wird, auch wenn das Objekt die Validierung nicht besteht und nicht gespeichert wird.
Wenn Sie create
mit Verzweigungslogik arbeiten, besteht das Risiko stiller Fehler, was bei Verwendung von new
+ nicht der Fall ist save
.
create!
leidet nicht unter dem gleichen Problem wie es und Ausnahme, wenn der Datensatz ungültig ist.
Die create
Alternative kann in Controllern nützlich sein, in denen respond_with
API-Antworten (JSON / XML) verwendet werden. In diesem Fall führt das Vorhandensein von Fehlern im Objekt dazu, dass die Fehler in der Antwort mit dem Status "zurückgegeben" werden. Dies unprocessable_entity
ist genau das, was Sie von einer API erwarten.
Ich würde immer die Option new
+ save
für HTML verwenden, insbesondere wenn Sie sich für die Flusskontrolle auf den Rückgabewert verlassen.