create counter_cache with conditions source http://stackoverflow.com/questions/7459275/counter-cache-with-conditions
def User < ActiveRecord::Base
has_many :documents
has_many :draft_docs , :class_name => 'Document', :conditions => { :status => 'draft' }
has_many :published_docs , :class_name => 'Document', :conditions => { :status => 'published' }
has_many :private_docs , :class_name => 'Document', :conditions => { :status => 'private' }
enddef Document < ActiveRecord::Base
belongs_to :user , :counter_cache => true
belongs_to :user , :inverse_of => :draft_docs , :counter_cache => true
belongs_to :user , :inverse_of => :published_docs, :counter_cache => true
belongs_to :user , :inverse_of => :private_docs , :counter_cache => true
end