Perhaps this is a Rails issue. However, I need to first determine
whether
I simply am missing something about updating members of an array.
I have an array of 10 ActiveRecord objects. I wish to iterate over the
array and update an attribute. When I do this the underlying table row
changes but the object in the array frequently does not. For example:
count = 0
current_entries.each do |entry|
puts( entry.object_id )
puts( current_entries[count].object_id )
puts( "***" )
puts( entry.lock_version )
entry = set_customs_entry_status_for( entry, status )
puts( entry.lock_version )
current_entries[ count ] = entry
puts( current_entries[ count ] = entry )
end
gives:
58380880
58380880
***
0
5
5
58378260
61590300
***
0
5
5
58377460
58392560
***
. . .
immediately followed by:
current_entries.each do |entry|
puts( entry.lock_version )
end
gives:
0
5
5
5
0
0
0
0
0
0
0
0
0
Does anyone see what it is that I am doing wrong? Why are some, but not
all, of the objects in the array unchanged?
on 2012-11-12 20:43
on 2012-11-12 21:46
On 12 November 2012 19:42, byrnejb <byrnejb@harte-lyne.ca> wrote: > puts( current_entries[count].object_id ) > puts( "***" ) > puts( entry.lock_version ) > entry = set_customs_entry_status_for( entry, status ) You have not shown us set_customs_entry_status_for but it might be informative to try a puts( entry.object_id ) here. Colin
on 2012-11-12 21:58
On Mon, November 12, 2012 15:44, Colin Law wrote: > The answer to the source of the problem actually was in the object_ids given in my original message. I just did not see what my data was telling me. There is a contingent update on entry when a different model is updated. This was creating the stale record issue because the table was being updated via a different set of objects from those under examination in the test. -- *** E-Mail is NOT a SECURE channel *** James B. Byrne mailto:ByrneJB@Harte-Lyne.ca Harte & Lyne Limited http://www.harte-lyne.ca 9 Brockley Drive vox: +1 905 561 1241 Hamilton, Ontario fax: +1 905 561 0757 Canada L8E 3C3
on 2012-11-13 04:58
On Mon, Nov 12, 2012 at 1:42 PM, byrnejb <byrnejb@harte-lyne.ca> wrote:
> entry = set_customs_entry_status_for( entry, status )
You need to reload the object after updating it if you need to use the
updated version.
set_customs_entry_status_for( entry, status )
entry.reload
--
Greg Donald
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.