# Transaction blocks and rollbacks

**URL:** <https://www.ruby-forum.com/t/transaction-blocks-and-rollbacks/175429>\
**Category:** Rails\
**Created:** [September 13, 2009, 9:19pm UTC](https://www.ruby-forum.com/t/transaction-blocks-and-rollbacks/175429 "2009-09-13T21:19:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![caiwangqin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/4bbf92/32.png) [@caiwangqin](https://www.ruby-forum.com/u/caiwangqin)\
**Post date:** [September 13, 2009, 9:19pm UTC](https://www.ruby-forum.com/t/transaction-blocks-and-rollbacks/175429/1 "2009-09-13T21:19:35Z")

</div>

Hello, I’m beginning to test a payment method, here is an abbreviated  
form.

How can I rollback and redo the transaction if any of the save calls  
fail?

def process\_payment! # class Payment  
transaction do  
success = true

```
  user.blitz_interest = true
  user.points += 1
  user.blitz_contributes += DIVIDEND

  user.credit.pebbles += 1

  blitz_fund = BlitzFund.find_or_create_by_dues(DIVIDEND)
  blitz_fund.general_pool += DIVIDEND

  save
  user.save
  user.credit.save
  blitz_fund.save
end

```

end

---

<div class="post-metadata">

**Author:** ![caiwangqin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/4bbf92/32.png) [@caiwangqin](https://www.ruby-forum.com/u/caiwangqin)\
**Post date:** [September 14, 2009, 1:00pm UTC](https://www.ruby-forum.com/t/transaction-blocks-and-rollbacks/175429/2 "2009-09-14T13:00:17Z")

</div>

The simplest way is:

raise ActiveRecord::Rollback

which will roll the whole transaction it’s executed inside of back.

–Matt J.

On Sep 13, 3:19 pm, Jesse C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![caiwangqin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/4bbf92/32.png) [@caiwangqin](https://www.ruby-forum.com/u/caiwangqin)\
**Post date:** [September 14, 2009, 1:33pm UTC](https://www.ruby-forum.com/t/transaction-blocks-and-rollbacks/175429/3 "2009-09-14T13:33:49Z")

</div>

Hi Jesse C.

Like

ActiveRecord::Base.transaction do  
#paste your code here  
end

Sijo
