Skip to content

Commit

Permalink
fix increase_parent_counter_cache callback
Browse files Browse the repository at this point in the history
no longer incrementing counter when callbacks are disabled (to make increase and decrease consistent)

Update parent_counter_cache now respects @_trigger_update_callback

Not sure if update follows the same rules as destroy introduced in 63b42f5
But would like both trees to follow the same logic

There are reports of incorrect cache counts. So when insert and destroy have different
guard clauses, it is suspect.
  • Loading branch information
kbrock committed Mar 4, 2023
1 parent ede43a2 commit 86d7c4a
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions lib/ancestry/instance_methods.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def touch_ancestors_callback

# Counter Cache
def increase_parent_counter_cache
return if ancestry_callbacks_disabled?
self.ancestry_base_class.increment_counter _counter_cache_column, parent_id
end

Expand All @@ -78,14 +79,18 @@ def decrease_parent_counter_cache
end

def update_parent_counter_cache
changed = saved_change_to_attribute?(self.ancestry_base_class.ancestry_column)

return unless changed
# @_trigger_update_callback comes from activerecord, which makes sure only once decrement when concurrent deletion.
# but @_trigger_update_callback began after [email protected].
# https://github.com/rails/rails/blob/v5.2.0/activerecord/lib/active_record/persistence.rb#L340
# https://github.com/rails/rails/pull/27248
return if defined?(@_trigger_update_callback) && !@_trigger_update_callback
return unless saved_change_to_attribute?(self.ancestry_base_class.ancestry_column)

if parent_id_was = parent_id_before_last_save
self.ancestry_base_class.decrement_counter _counter_cache_column, parent_id_was
end

# TODO: use increase_parent_counter_cache instead?
parent_id && self.ancestry_base_class.increment_counter(_counter_cache_column, parent_id)
end

Expand Down

0 comments on commit 86d7c4a

Please sign in to comment.