Can someone clear up nested transactions?

I simply can't find a straight answer on this anywhere. If I have the
need of nested transactions do I need to do this

Article.transaction

  my_article = Article.new(:title => 'This is a new title', :content
=> 'This is some new content')
  my_article.save

  Comment.transaction

    my_comment = Comment.new(:article => my_article, :body => 'This is
the body of my comment')
    my_comment.save

    CommentConfirmation.transaction

      my_conf = CommentConfirmation.new(:commnet =>
my_comment, :confirmed => true)
      my_conf.save

    end

  end

  Vote.transaction

    my_vote = Vote.new(:article => my_article, :rank => 5)
    my_vote.save

  end

end

or does

Article.transaction

  my_article = Article.new(:title => 'This is a new title', :content
=> 'This is some new content')
  my_article.save

  my_comment = Comment.new(:article => my_article, :body => 'This is
the body of my comment')
  my_comment.save

  my_conf = CommentConfirmation.new(:commnet => my_comment, :confirmed
=> true)
  my_conf.save

  my_vote = Vote.new(:article => my_article, :rank => 5)
  my_vote.save

end

do the same thing?

Also, does create work the same as save, in terms of transactions, so
if I do something like

Article.transaction

  my_article = Article.new(:title => 'This is a new title', :content
=> 'This is some new content')
  my_article.save

  Comment.transaction

    my_comment = Comment.new(:article => my_article, :body => 'This is
the body of my comment')
    my_comment.save

  end

end

is that the same as

Article.transaction

  my_article = Article.create(:title => 'This is a new
title', :content => 'This is some new content')

  Comment.transaction

    my_comment = Comment.create(:article => my_article, :body => 'This
is the body of my comment')

  end

end

Dale

The short answer to your question is yes, all the examples you gave
above are equivalent: they would each roll back under the same
cicumstances and leave the DB in the same condition. Nesting
transactions in Rails _almost_ never has an effect. I was going to
give a more complete explanation, but it got sort of unreadable so I
posted it here:
http://expectedbehavior.com/articles/2007/05/29/nested-transactions-in-rails

Hopefully that's enough to clear things up for you.

Matt

Hi,

how can I span a transaction over two or more unrelated tables?
Is there a generic way to start a transaction on a not per-only-one-
model basis, so that I can change rows in different tables and a
rollback rolls back allchanges in all unrelated tables?
So the sould would not be "MyModel.transaction..." but something like
"transaction..."

thanks,
Alex.