tutorial software rails ejemplos descargar curso caracteristicas ruby-on-rails

ruby on rails - software - Las diferencias entre.build,.create y.create! y cuando deberían ser usados?



ruby on rails tutorial (4)

¡Así que he estado viendo personas usando .build, .create y .create! dentro de sus controladores cada vez más últimamente. ¿Cuál es la diferencia de simplemente usar .new y pasar el objeto param''d y luego .save? ¿Hay pros y contras? ¿El uso de estos otros métodos ofrece beneficios?


#create es la versión más corta de nuevo y guardar. #¡crear! está lanzando una excepción si la validación no fue positiva.


Aunque es correcto create llamadas new y luego save existe una gran diferencia entre las dos alternativas en sus valores de devolución.

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 controlar el 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 el sentido de que la rama superior de la declaración if siempre se ejecutará incluso si el objeto no supera las validaciones y no se guarda.

Si usa create con la lógica de bifurcación, corre el riesgo de fallas silenciosas, que no es el caso si usa new + save .

create! no sufre del mismo problema que plantea y excepción si el registro no es válido.

La alternativa de create puede ser útil en controladores donde respond_with se usa para respuestas de 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 quiere de una API.

Siempre usaría la new opción + save para html, especialmente si está confiando en el valor de retorno para el control de flujo.


Hay un par de diferencias, pero no son grandes:

  1. .create es equivalente a .new seguido de .save . Es simplemente más sucinto.
  2. .create! es equivalente a .new seguido de .save! (arroja un error si el guardar falla). También es un poquito más corto
  3. Creo que .build es principalmente un alias para .new . Funciona de una manera en Rails 3 y de otra manera en Rails <3.x

Sin embargo, la parte más importante es que estos métodos se pueden llamar a través de una asociación ( has_many , etc.) para vincular automáticamente los dos modelos.


Yo secundaría las respuestas anteriores. Además, para create , uno no puede pasar false como un argumento que puede hacer con save . Pasar false como argumento omitirá todas las validaciones de rieles