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
11
# File 'activerecord/lib/active_record/counter_cache.rb', line 8

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

Instance Method Details

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

[ GitHub ]

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

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

  counter_cached_association_names.each do |association_name|
    association(association_name).increment_counters
  end

  id
end

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

[ GitHub ]

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

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 210

def destroy_row
  affected_rows = super

  if affected_rows > 0
    counter_cached_association_names.each do |association_name|
      association = association(association_name)

      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