Forum: Ruby on Rails Updating objects in arrays

Posted by James Byrne (byrnejb)
on 2012-11-12 20:43
(Received via mailing list)
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?
Posted by Colin Law (Guest)
on 2012-11-12 21:46
(Received via mailing list)
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
Posted by James Byrne (byrnejb)
on 2012-11-12 21:58
(Received via mailing list)
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
Posted by Greg Donald (destiney)
on 2012-11-13 04:58
(Received via mailing list)
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
No account? Register here.