From: Robert Klemme Date: 2005-11-16T02:27:17+09:00 Subject: Re: Database Transactions listrecv@gmail.com wrote: > Okay, I'll trust you guys know better than I do. > How do I do this with a block? http://wiki.rubyonrails.com/rails/pages/HowToUseTransactions > def signup > # It gets a little tricky, since we want to create either both an > account and user or neither > > @account = Account.new(params[:account]) > @user = User.new(params[:user]) > @user.login = @account.code # For now, we keep a 1-to-1 between > these > @user.real_name = @account.name > > begin > # TODO begin transaction > if (@user.valid?) > @account.user = @user # Don't assign until we know it is valid - > ActiveRecord sometimes saves on assign > if (@account.valid?) # We need to do this in two steps, since > @account won't be valid without a user > @user.save! > @account.save! > # TODO end transaction > flash[:notice] = 'Account added.' > redirect_to :action => 'list' > return > end > end > # TODO rollback transaction Why do you want to do a rollback here? There is no rescue clause nor any indication that an error has occurred. If you use a block then you don't need explicit commit and rollback. It's handled in the method that receives the block (#transaction). > render :action => 'new' > # TODO rescue exceptions > end > end > > > (Okay, I admit it, yes, this is part of a rails app...) I know only little about RoR so there might as well be other answers. Kind regards robert