module ActiveRecord::CounterCache

Active Record Counter Cache

Protected Instance Methods

actually_destroyed?() click to toggle source
# File lib/active_record/counter_cache.rb, line 128
def actually_destroyed?
  @_actually_destroyed
end
clear_destroy_state() click to toggle source
# File lib/active_record/counter_cache.rb, line 132
def clear_destroy_state
  @_actually_destroyed = nil
end

Private Instance Methods

_create_record(*) click to toggle source
Calls superclass method
# File lib/active_record/counter_cache.rb, line 138
def _create_record(*)
  id = super

  each_counter_cached_associations do |association|
    if send(association.reflection.name)
      association.increment_counters
      @_after_create_counter_called = true
    end
  end

  id
end
destroy_row() click to toggle source
Calls superclass method
# File lib/active_record/counter_cache.rb, line 151
def destroy_row
  affected_rows = super

  if affected_rows > 0
    each_counter_cached_associations do |association|
      foreign_key = association.reflection.foreign_key.to_sym
      unless destroyed_by_association && destroyed_by_association.foreign_key.to_sym == foreign_key
        if send(association.reflection.name)
          association.decrement_counters
        end
      end
    end
  end

  affected_rows
end
each_counter_cached_associations() { |association(to_sym)| ... } click to toggle source
# File lib/active_record/counter_cache.rb, line 168
def each_counter_cached_associations
  _reflections.each do |name, reflection|
    yield association(name.to_sym) if reflection.belongs_to? && reflection.counter_cache_column
  end
end