https://github.com/flanker/mongoid-categorized_counter_cache
Categorized counter cache for Ruby Mongoid models
https://github.com/flanker/mongoid-categorized_counter_cache
counter-cache mongoid mongoid-plugin ruby rubygem
Last synced: 7 months ago
JSON representation
Categorized counter cache for Ruby Mongoid models
- Host: GitHub
- URL: https://github.com/flanker/mongoid-categorized_counter_cache
- Owner: flanker
- License: mit
- Created: 2018-08-30T04:01:25.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-07-24T02:22:04.000Z (over 3 years ago)
- Last Synced: 2025-05-16T15:11:57.549Z (8 months ago)
- Topics: counter-cache, mongoid, mongoid-plugin, ruby, rubygem
- Language: Ruby
- Homepage: https://rubygems.org/gems/mongoid-categorized_counter_cache
- Size: 33.2 KB
- Stars: 1
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# mongoid-categorized_counter_cache
[](https://www.travis-ci.com/flanker/mongoid-categorized_counter_cache)
Enhancement to `counter cache` for `mongoid`
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'mongoid-categorized_counter_cache'
```
And then execute:
$ bundle
Or install it yourself as:
$ gem install mongoid-categorized_counter_cache
## Usage
When you have a one-to-many relation using mongoid, you can define a `counter cache` attribute for the relation.
```ruby
class Author
include Mongoid::Document
has_many :books
end
class Book
include Mongoid::Document
belongs_to :author, counter_cache: true
end
```
Then:
```ruby
author = Author.create
author.books.create
author.books_count
# => 1
# returns a cached count of author.books
```
`mongoid-categorized_counter_cache` helps to you cache the count of children documents by given category (any attribute of child document)
```ruby
class Author
include Mongoid::Document
has_many :books
end
class Book
include Mongoid::Document
include Mongoid::CategorizedCounterCache
field :genre
belongs_to :author, counter_cache: true
categorized_counter_cache :author do |book|
book.genre
end
end
```
Then:
```ruby
author = Author.create
author.books.create genre: 'fiction'
author.books.create genre: 'drama'
author.books_count
# => 2
# returns a cached count of all author.books
author.books_fiction_count
# => 1
# returns a cached count of all author.books which has a fiction genre
author.books_drama_count
# => 1
# returns a cached count of all author.books which has a drama genre
```
[See spec test for more info](spec/mongoid/categorized_counter_cache_spec.rb)