De acuerdo con save bang your head, active record will drive you mad, debemos evitar el uso de save!
y rescue
idioma para situaciones excepcionales. Dado que, digamos que un modelo necesita @post.mark_rejected
.Cuándo usar `save` vs` save! `En el modelo?
Si el código en mark_rejected
falla debido a uno de los siguientes problemas, ¿debe producirse una excepción? :
- si hay un problema de validación
- si un no anulable-campo se está asignando un valor nulo
- si había una pérdida de conexión a la base de datos
Si no tiramos una excepción, entonces:
- acción del controlador tendría que comprobar si hay valor de retorno de
mark_rejected
y hacerlo es cosa - no esperamos una excepción de esa llamada al método, por lo que no escribimos una cláusula
rescue
en la acción del controlador, por lo tanto, la excepción sube hasta (... donde sea ...) y probablemente aparezca como algunos (500 HTTP ?) error
código Ejemplo:
def mark_rejected
...
save!
end
o
def mark_rejected
...
save
end
@Zabba Aquí está el [código fuente y la documentación de 'guardar' y' guardar! '] (Https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb# L86). – JJD