# Strange behaviour in ActiveRecord transaction

**URL:** <https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004>\
**Category:** Rails\
**Created:** [May 28, 2009, 11:17am UTC](https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004 "2009-05-28T11:17:16Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![farmerss](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/dbc845/32.png) [@farmerss](https://www.ruby-forum.com/u/farmerss)\
**Post date:** [May 28, 2009, 11:17am UTC](https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004/1 "2009-05-28T11:17:16Z")

</div>

Hi,  
I’m using an ActiveRecord transaction in a Rails app,  
and one of the changes made during the transaction is reverted  
as the transaction finishes, whilst the other changes are preserved.  
The code is like:

* * *

def swap(other)

self\_number=self.number #==1  
other\_number=other.number #==2

ActiveRecordModel.transaction do

```
version=Version.find_by_kind(self.kind)
#version.number==30

self.number=other_number
other.number=self_number
self.save
other.save

version.number+=1
version.save

#self.number==2
#other.number==1
#version.number==31

```

end

#self.number==1 \*\*\*Reverted!  
#other.number==1  
#version.number=31

## end

No exception is being raised by the transaction. Also, I’ve tried  
reversing the order of the assignment and saving on self and other, but  
it’s still just self.number that reverts. Any ideas?

---

<div class="post-metadata">

**Author:** ![farmerss](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/dbc845/32.png) [@farmerss](https://www.ruby-forum.com/u/farmerss)\
**Post date:** [May 28, 2009, 11:21am UTC](https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004/2 "2009-05-28T11:21:51Z")

</div>

it’s Rails 2.3.2 on Windows (Vista).

---

<div class="post-metadata">

**Author:** ![farmerss](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/dbc845/32.png) [@farmerss](https://www.ruby-forum.com/u/farmerss)\
**Post date:** [May 28, 2009, 11:22am UTC](https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004/3 "2009-05-28T11:22:35Z")

</div>

and MySQL 5.0

---

<div class="post-metadata">

**Author:** ![farmerss](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/dbc845/32.png) [@farmerss](https://www.ruby-forum.com/u/farmerss)\
**Post date:** [May 29, 2009, 9:11am UTC](https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004/4 "2009-05-29T09:11:13Z")

</div>

Perhaps some validation fails on self. Try save! To raise an exception

2009/5/28, Sandworth M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> and MySQL 5.0
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> >

–  
Von meinen Mobilgerät aus gesendet

---

<div class="post-metadata">

**Author:** ![farmerss](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/dbc845/32.png) [@farmerss](https://www.ruby-forum.com/u/farmerss)\
**Post date:** [May 30, 2009, 7:11am UTC](https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004/5 "2009-05-30T07:11:55Z")

</div>

I just noticed that in the code sample I submitted, I actually  
wrote “self.number=”. In my original code I had “number=”.

---

<div class="post-metadata">

**Author:** ![farmerss](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/dbc845/32.png) [@farmerss](https://www.ruby-forum.com/u/farmerss)\
**Post date:** [May 30, 2009, 7:10am UTC](https://www.ruby-forum.com/t/strange-behaviour-in-activerecord-transaction/169004/6 "2009-05-30T07:10:44Z")

</div>

Solved.  
This was not an issue with ActiveRecord/Rails.  
(I had to use “self.number=” instead of “number=”. Using “number=”  
wasn’t actually calling the function “number=”,  
but I presume was creating a local variable “number” instead.)
