Así que he estado viendo a la gente que usa .build, .createy.create! dentro de sus controladores más y más últimamente. ¿Cuál es la diferencia de usar .newy pasar el objeto param'd y luego .save? ¿Hay pros y contras? ¿El uso de estos otros métodos ofrece beneficios?
ruby-on-rails
Tim Knight
fuente
fuente

Aunque es correcto que
createllamanewy luegosavehay una gran diferencia entre las dos alternativas en sus valores de retorno.Savedevuelvetrueofalsedependiendo 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.Createdevolverá 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 laifinstrucción siempre se ejecutará, incluso si el objeto falla las validaciones y no se guarda.Si usa la
createlógica de ramificación, corre el riesgo de fallas silenciosas, lo que no es el caso si usanew+save.create!no sufre el mismo problema que plantea y una excepción si el registro no es válido.La
createalternativa puede ser útil en controladores donderespond_withse 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 deunprocessable_entity, que es exactamente lo que desea de una API.Siempre usaría la opción
new+savepara html, especialmente si confía en el valor de retorno para el control de flujo.fuente
#create es una versión más corta de new y save. #¡crear! está lanzando una excepción si la validación no fue positiva.
fuente
En segundo lugar, las respuestas anteriores. Además
create, no se puede pasarfalsecomo argumento con el que se puede hacersave. Pasarfalsecomo argumento omitirá todas las validaciones de rielesfuente