Skip to content

Instantly share code, notes, and snippets.

@dahal
Forked from a-chernykh/forum.rb
Last active August 29, 2015 14:16
Show Gist options
  • Save dahal/822336f08e32b016d7f8 to your computer and use it in GitHub Desktop.
Save dahal/822336f08e32b016d7f8 to your computer and use it in GitHub Desktop.
class Forum
include Mongoid::Document
include Mongoid::Timestamps
field :posts_count, :type => Integer, :default => 0
has_many_related :posts
end
module Mongoid
module CounterCache
extend ActiveSupport::Concern
module ClassMethods
def counter_cache(options)
name = options[:name]
counter_field = options[:field]
after_create do |document|
relation = document.send(name)
relation.collection.update(relation._selector, {'$inc' => {counter_field.to_s => 1}}, {:multi => true})
end
after_destroy do |document|
relation = document.send(name)
relation.collection.update(relation._selector, {'$inc' => {counter_field.to_s => -1}}, {:multi => true})
end
end
end
end
end
class Post
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::CounterCache
counter_cache :name => 'forum', :field => 'posts_count'
belongs_to_related :forum
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment