module ActiveRecord::CounterCache

def _create_record(attribute_names = self.attribute_names)

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

def _foreign_keys_equal?(fkey1, fkey2)

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

def destroy_row

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