Obwohl es richtig ist, dass createAufrufe newund dann savegibt es einen großen Unterschied zwischen den beiden Alternativen in ihren Rückgabewerten.
SaveGibt entweder trueoder falseabhä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.
Creategibt 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 ifAnweisung immer ausgeführt wird, auch wenn das Objekt die Validierung nicht besteht und nicht gespeichert wird.
Wenn Sie createmit 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 createAlternative kann in Controllern nützlich sein, in denen respond_withAPI-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_entityist genau das, was Sie von einer API erwarten.
Ich würde immer die Option new+ savefür HTML verwenden, insbesondere wenn Sie sich für die Flusskontrolle auf den Rückgabewert verlassen.