deleting model using optimistic locking results in ActiveRecord::StaleObjectError


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.


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.


Hi Coriordan,
That worked for me, many thanks, but only drawback is, delete_all wont call the callbacks in children classes.