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? -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit groups.google.com/d/msg/rubyonrails-talk/-/GyCbUSOn50wJ. For more options, visit groups.google.com/groups/opt_out.
On 12 November 2012 19:42, byrnejb <byrnejb-fqAF1SpE7daWxEb2tNKyrg@public.gmane.org> wrote:> 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 )You have not shown us set_customs_entry_status_for but it might be informative to try a puts( entry.object_id ) here. Colin> 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?-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit groups.google.com/groups/opt_out.
On Mon, November 12, 2012 15:44, Colin Law wrote:> On 12 November 2012 19:42, byrnejb <byrnejb-fqAF1SpE7daWxEb2tNKyrg@public.gmane.org> wrote: >> 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 > > You have not shown us set_customs_entry_status_for but it might be > informative to try a > puts( entry.object_id ) here. >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-boovWovfBzKWxEb2tNKyrg@public.gmane.org Harte & Lyne Limited harte-lyne.ca 9 Brockley Drive vox: +1 905 561 1241 Hamilton, Ontario fax: +1 905 561 0757 Canada L8E 3C3 -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit groups.google.com/groups/opt_out.
On Mon, Nov 12, 2012 at 1:42 PM, byrnejb <byrnejb-fqAF1SpE7daWxEb2tNKyrg@public.gmane.org> wrote:> 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 )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 -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit groups.google.com/groups/opt_out.