Aunque es correcto que create
llama new
y luego save
hay una gran diferencia entre las dos alternativas en sus valores de retorno.
Save
devuelve true
o false
dependiendo de si el objeto se guardó correctamente en la base de datos o no. Esto se puede usar para el control de flujo según el primer ejemplo en la pregunta anterior.
Create
devolverá el modelo independientemente de si el objeto se guardó o no. Esto tiene implicaciones para el código anterior en que la rama superior de laif
instrucción siempre se ejecutará, incluso si el objeto falla las validaciones y no se guarda.
Si usa la create
lógica de ramificación, corre el riesgo de fallas silenciosas, lo que no es el caso si usa new
+ save
.
create!
no sufre el mismo problema que plantea y una excepción si el registro no es válido.
La create
alternativa puede ser útil en controladores donde respond_with
se usa para respuestas API (JSON / XML). En este caso, la existencia de errores en el objeto hará que los errores se devuelvan en la respuesta con un estado de unprocessable_entity
, que es exactamente lo que desea de una API.
Siempre usaría la opción new
+ save
para html, especialmente si confía en el valor de retorno para el control de flujo.