module ActiveRecordExtensions::DetachedCounterCache::Base::ClassMethods
Public Instance Methods
belongs_to_with_detached_counters(association_id, options = {})
click to toggle source
# File lib/detached_counter_cache.rb, line 18 def belongs_to_with_detached_counters(association_id, options = {}) if add_detached_counter_cache = options.delete(:detached_counter_cache) placeholder = DetachedCounterCachePlaceholder.new options[:counter_cache] = true end belongs_to_without_detached_counters(association_id, options) if add_detached_counter_cache reflection = reflections[association_id.to_s] placeholder.reflection = reflection klass = reflection.klass klass.detached_counter_cache_table_names += [placeholder.detached_counter_cache_table_name] klass.detached_counter_cache_placeholders = klass.detached_counter_cache_placeholders.merge(reflection.counter_cache_column.to_s => placeholder) end end
update_counters_with_detached_counters(id, counters)
click to toggle source
# File lib/detached_counter_cache.rb, line 36 def update_counters_with_detached_counters(id, counters) detached_counters = [] counters.each do |column_name, value| if detached_counter_cache_placeholders.has_key? column_name.to_s detached_counters << [detached_counter_cache_placeholders[column_name.to_s], value] counters.delete(column_name) end end detached_counters.each do |placeholder, value| self.connection.execute(<<-SQL INSERT INTO `#{placeholder.detached_counter_cache_table_name}` (#{placeholder.reflection.foreign_key}, count) VALUES (#{id}, #{value}) ON DUPLICATE KEY UPDATE count = count + #{value} SQL ) end update_counters_without_detached_counters(id, counters) unless counters.blank? end