123456789_123456789_123456789_123456789_123456789_

Module: ActiveRecord::CounterCache

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: activerecord/lib/active_record/counter_cache.rb

Class Method Summary

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

append_features, prepend_features

Instance Method Summary

DSL Calls

included

[ GitHub ]


8
9
10
# File 'activerecord/lib/active_record/counter_cache.rb', line 8

included do
  class_attribute :_counter_cache_columns, instance_accessor: false, default: []
end

Instance Method Details

#_create_record(attribute_names = self.attribute_names) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/counter_cache.rb', line 187

def _create_record(attribute_names = self.attribute_names)
  id = super

  each_counter_cached_associations do |association|
    association.increment_counters
  end

  id
end

#_foreign_keys_equal?(fkey1, fkey2) ⇒ Boolean (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/counter_cache.rb', line 217

def _foreign_keys_equal?(fkey1, fkey2)
  fkey1 == fkey2 || Array(fkey1).map(&:to_sym) == Array(fkey2).map(&:to_sym)
end

#destroy_row (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/counter_cache.rb', line 197

def destroy_row
  affected_rows = super

  if affected_rows > 0
    each_counter_cached_associations do |association|
      unless destroyed_by_association && _foreign_keys_equal?(destroyed_by_association.foreign_key, association.reflection.foreign_key)
        association.decrement_counters
      end
    end
  end

  affected_rows
end

#each_counter_cached_associations (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/counter_cache.rb', line 211

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