Pregunta

Tengo una acción compleja dentro controlador que realiza varias consultas de actualización de la base de datos.

¿Cómo puedo realizar esta acción actúa como transacciones sin ningún tipo de refactorización estructural?

¿Fue útil?

Solución

MyModel.transaction do
  begin
    @model.update_stuff
    @sub_model.update_stuff
    @sub_sub_model.update_stuff
  rescue ActiveRecord::StatementInvalid # or whatever 
    # rollback is automatic, but if you want to do something additional, 
    # add it here
  end
end

Aquí están la documentación para el método de transacción .

Otros consejos

Es posible realizar todas las acciones en el controlador de transacciones a la vez con:

around_filter :transactional

def transactional
  ActiveRecord::Base.transaction do
    yield
  end
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top