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:
Publicar un comentario