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"


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow