Transacciones

Que tal gente!!

Tengo un metodo dentro de un controlador donde se actualizan varias
tablas (Objetos), para mantener la integridad de los datos quiero usar
transacciones y en el momento que falle alguna actualizacion hacer un
rollback.

investigue un poco acerca de ActiveRecord::Base.transaction do pero no
me quedo claro como hacer el rollback.

Lo que quiero hacer es algo asi
begin trans
paso1
paso2
paso3
commit

error

rollback

Si alguno de uds conoce alguna forma, se los agradezco

Saludos

Hola,

error

rollback

ActiveRecord::Base.transaction do
paso1
paso2
paso3
end

Si cualquiera de los pasos da una excepción, se hará un rollback
automáticamente. Si no hay errores, se hará un commit. Si quieres puedes
forzar una excepción con un raise dentro del bloque para provocar un
rollback.

La excepción (a no ser de un tipo especial) se propagará después de
hacerse el rollback, así que tenlo en cuenta si te hace falta. Te lo
cuentan aquí:
http://api.rubyonrails.com/classes/ActiveRecord/Transactions/ClassMethods.html#M001115

saludos,

javier ramírez

tendria algo de este estilo

Account.transaction do
Equipos.update_attributes(params[:equipos])
Base.save
ZonaCarga.update_attributes(params[:zona_carga])
end

En caso, de que algunos de los objetos de algun error de validacion en
el modelo o de integridad de datos automaticamente se hace rollback!

por que normalmente se coloca estas condiciones

if Equipos.update_attributes(params[:equipos])
OK
else
#cualquier condicion
end

Saludos

Hola,

tendria algo de este estilo

Account.transaction do
Equipos.update_attributes(params[:equipos])
Base.save
ZonaCarga.update_attributes(params[:zona_carga])
end

esto no te va a funcionar. Estás usando métodos que no lanzan
excepciones, así que vaya bien o mal la transaction nunca va a entrar en
el bloque interno de rescue que tiene para hacer el rollback. Deberías
usar update_attributes! y save!

saludos,

javier ramírez