Forum: Ruby on Rails ActiveRecord allows un-synced aliases?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Anthony DeRobertis (Guest)
on 2006-03-07 06:33
(Received via mailing list)
q1 = Question.find(1)
q2 = Question.find(1)

Now, we find q1.__id__ != q2.__id__.

It appears the two aliases are not kept in sync:

q1.name                => 'old name'
q2.name = 'new name'
q2.save!
q1.name                => 'old name'
q2.name                => 'new name'
q1.reload
q1.name                => 'new name'


Even worse, is this fun:

q1.destroy
q2.name = 'third name'
q2.save!

That actually runs; ActiveRecord happily updates all 0 rows that match
(let's hope IDs can never be re-used, or that could have just updated
the wrong row)

Finally,

q2.reload
ActiveRecord::RecordNotFound: Couldn't find Question with ID=1


Why does ActiveRecord return two objects both representing a single row
in the database?
Kent S. (Guest)
on 2006-03-07 09:07
(Received via mailing list)
This is correct. Rails doesn't use IdentityMap pattern (in terms of
PoEAA). You should be aware of that when you develop with Rails.

Kent
Anthony DeRobertis (Guest)
on 2006-03-07 22:07
(Received via mailing list)
Kent S. wrote:

> This is correct. Rails doesn't use IdentityMap pattern (in terms of
> PoEAA). You should be aware of that when you develop with Rails.

Is .save! working on a record that (no longer) exists at least a bug?
Especially on databases that return the number of effected rows (at
least Pg and MySQL), this should be really easy to detect.
Kent S. (Guest)
on 2006-03-08 01:47
(Received via mailing list)
That particular case I'd recommend to handle with database
transactions and an appropriate isolation level set. Also you should
look at the AR::Locking facility at

http://api.rubyonrails.org/classes/ActiveRecord/Locking.html

Kent.
This topic is locked and can not be replied to.