domingo, 12 de octubre de 2008

Transacciones en rails

En esta entrada expliqué como usar las transacciones a nivel de base de datos (MySQL), ahora lo haré a nivel de aplicación con rails.

Si usamos MySQL debemos recordar que por ahora el único motor que soporta transacciones es InnoDB.

Los objetos que heredan de ActiveRecord tienen un método transaction que acepta un bloque, las operaciones que se ejecuten dentro se realizarán indivisiblemente.

Imaginemos que tenemos un modelo llamado Post, con los campos title y content, el campo title no puede ser nulo.

Si hacemos esto.

Post.transaction do
Post.create(:title => 'en la transaccion', :content => 'texto')
Post.create(:content => 'texto')
end

Como la segunda operación no es válida (el campo title es nulo) ninguna de las operaciones se reflejará en base de datos, por el contrario, si le asignamos un title a la segunda operación se ejecutarán normalmente y tendremos dos entradas nuevas en la tabla de posts.

0 comentarios: