Module: MongoMapper::Plugins::BelongsToWithCounterCache::ClassMethods
- Defined in:
- lib/mongo_mapper_ext/mongo_mapper/plugins/belongs_to_with_counter_cache.rb
Instance Method Summary collapse
-
#belongs_to(association_id, options = {}, &extension) ⇒ Object
CounterCache belongs_to :item, counter_cashe: true.
Instance Method Details
#belongs_to(association_id, options = {}, &extension) ⇒ Object
CounterCache belongs_to :item, counter_cashe: true
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/mongo_mapper_ext/mongo_mapper/plugins/belongs_to_with_counter_cache.rb', line 9 def belongs_to association_id, ={}, &extension # options.must_not.include :counter_cashe if .delete(:counter_cache) association_id = association_id.to_s association_key = "#{association_id}_id" cache_attribute = "#{self.alias.pluralize.underscore}_count" cache_class = if class_name = [:class_name] class_name.constantize else association_id.classify.constantize end raise "key :#{cache_attribute} not defined on :#{cache_class}!" unless cache_class.keys.include? cache_attribute increase_method_name = "increase_#{cache_class.alias.underscore}_#{self.alias.pluralize.underscore}_counter" decrease_method_name = "decrease_#{cache_class.alias.underscore}_#{self.alias.pluralize.underscore}_counter" define_method increase_method_name do cache_class.upsert!({id: self.send(association_key)}, :$inc => {cache_attribute => 1}) end protected increase_method_name define_method decrease_method_name do cache_class.upsert!({id: self.send(association_key)}, :$inc => {cache_attribute => -1}) end protected decrease_method_name after_create increase_method_name after_destroy decrease_method_name end super association_id, , &extension end |