ActiveRecord's standard procedure for transactions is to send a block, and throw an exception to roll it back ( http://api.rubyonrails.com/classes/ActiveRecord/Transactions/ClassMethods.html ). I found this rather uncomfortable. I'd like to be able to begin transactions, commit them, or roll them back from within (fairly) complex control structures - and having to do everything within a block, with one way out, is no good. Any suggestions? PS This question concerns ActiveRecord, an O/R mapper which can be used for lots of things. It's _not_ a _rails_ questions (what's rails???)