I'm interested in this as well. I discovered today that a project I'm
developing threw several StaleObject errors, after I got a report of
discrepancies in views of the data.
I did not even bother writing code to catch the error, eventhough I
went to the trouble to add lock_version fields to all my tables. (I
even wrote a nice little piece of code that reads the schema and
creates lock_versions for all my tables. Got carried away I guess :^)
I'm wondering how the data got stale. I'm certain the customer was the
only person updating the rows. However, I have a piece of code that
could be better written...
In the loop below, packing_item belongs_to rma and I do a separate
save on each table record. The error occurred on the second save. Can
this happen if only one person is running the application?
packing_slip.packing_items.each_with_index do |item, i|
item.rma.state_id = PACKED
item.rma.packing_slip_id = packing_slip.id
item.rma.tracking_number = tracking[item.rma.number]
item.tracking_number = tracking[item.rma.number]
# save packing_item
# save rma <-- the error happened at this point.