Ruby on Rails
Transacciones ActiveRecord
Buscar..
Introducción
Las transacciones ActiveRecord son bloques protectores donde la secuencia de consultas de registros activos solo son permanentes si todas pueden tener éxito como una sola acción atómica.
Comenzando con transacciones de registro activo
Las transacciones de registro activo se pueden aplicar a las clases de modelo así como a las instancias de modelo, los objetos dentro del bloque de transacción no necesitan ser todos instancias de la misma clase. Esto se debe a que las transacciones son por conexión de base de datos, no por modelo. Por ejemplo:
User.transaction do
account.save!
profile.save!
print "All saves success, returning 1"
return 1
end
rescue_from ActiveRecord::RecordInvalid do |exception|
print "Exception thrown, transaction rolledback"
render_error "failure", exception.record.errors.full_messages.to_sentence
end
El uso de guardar con una explosión asegura que la transacción se retrotraerá automáticamente cuando se lance la excepción y, después de la reversión, el control se dirija al bloque de rescate para la excepción. ¡Asegúrate de rescatar las excepciones lanzadas desde el guardado! en Bloque de Transacciones.
Si no desea utilizar guardar, puede elevar manualmente raise ActiveRecord::Rollback
cuando falla la raise ActiveRecord::Rollback
guardar. No necesitas manejar esta excepción. Luego, hará retroceder la transacción y tomará el control hasta la siguiente declaración después del bloqueo de la transacción.
User.transaction do
if account.save && profile.save
print "All saves success, returning 1"
return 1
else
raise ActiveRecord::Rollback
end
end
print "Transaction Rolled Back"