ActiveRecord: diferencias entre save, save!, create y create!

ActiveRecord define varias maneras para guardar un objeto (instancia de un modelo) en la base de datos, es importante saber como actúa cada una para luego no tener sorpresas y usar el más adecuado en cada momento.

  • save: Devuelve true si el objeto se ha guardado correctamente, o nil en caso contrario. No genera ninguna excepción.


  • save!: Devuelve true si el objeto se ha guardado correctamente, y si no ha podido guardarse lanza una excepción con el error.
    Esta excepción es del tipo ActiveRecord::RecordInvalid, se lanza principalmente cuando hay errores de validación (campo obligatorio vacío, email no válido, etc ...) y la podemos usar para mostrar el error al usuario.


  • create: Retorna siempre el objeto independientemente de que se haya guardado con éxito o no, tenemos que consultar el objeto por si ha ocurrido algún error de validación.


  • create!: Aparece en Rails 1.2, yo no lo he podido probar todavía pero por lo que pone en Agile Web Development with Rails devuelve el objeto si se ha guardado con éxito, sino retorna una excepción al igual que save!



Más información:


Etiquetas: , ,


Recommend Me


XING
View Sergio Espeja's profile on LinkedIn