Forum: Ruby on Rails deleting model using optimistic locking results in ActiveRecord::StaleObjectError

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.
A61a5cac149af9d66ddbbc23d6f152da?d=identicon&s=25 Cathal O'Riordan (coriordan)
on 2013-01-10 17:30
(Received via mailing list)
Hi,

I have a model defined like so:

class Course < ActiveRecord::Base
  has_many :attendances, :dependent => :destroy
  has_many :attendees, :through => :attendances, :source => :user

...

when I attempt to delete a Course model, it results in an
ActiveRecord::StaleObjectError. Reviewing the resulting SQL calls shows
that the 'lock_version' column gets incremented on each dependent
'Attendance' model that is deleted. When the Course model is deleted,
its
lock_version no longer matches the persisted row in the database, and
hence
the StaleObjectError. Any help on how to handle this situation would be
greatly appreciated.

regards,
Cathal.
A61a5cac149af9d66ddbbc23d6f152da?d=identicon&s=25 Cathal O'Riordan (coriordan)
on 2013-01-11 11:29
(Received via mailing list)
The only workaround to this I've been able to find is to use :dependent
=>
:delete_all. This performs a general delete of related objects and
doesn't
update the lock_version on the parent.

Cathal.
Bb8674a7b454ef2630dcc5ca8f38c60b?d=identicon&s=25 unknown (Guest)
on 2013-09-19 14:23
(Received via mailing list)
Hi Coriordan,
That worked for me, many thanks, but only drawback is, delete_all wont
call
the callbacks in children classes.
This topic is locked and can not be replied to.