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
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.
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.