Sha256: ae26a4e3817dbf463142a6bc7fb21251fa89287c1a5c44f223908ad87f8014a0
Contents?: true
Size: 1.71 KB
Versions: 5
Compression:
Stored size: 1.71 KB
Contents
[Back to Guides](../README.md) # Caching To cache a serializer, call ```cache``` and pass its options. The options are the same options of ```ActiveSupport::Cache::Store```, plus a ```key``` option that will be the prefix of the object cache on a pattern ```"#{key}/#{object.id}-#{object.updated_at}"```. The cache support is optimized to use the cached object in multiple request. An object cached on a ```show``` request will be reused at the ```index```. If there is a relationship with another cached serializer it will also be created and reused automatically. **[NOTE] Every object is individually cached.** **[NOTE] The cache is automatically expired after an object is updated, but it's not deleted.** ```ruby cache(options = nil) # options: ```{key, expires_in, compress, force, race_condition_ttl}``` ``` Take the example bellow: ```ruby class PostSerializer < ActiveModel::Serializer cache key: 'post', expires_in: 3.hours attributes :title, :body has_many :comments end ``` On this example every ```Post``` object will be cached with the key ```"post/#{post.id}-#{post.updated_at}"```. You can use this key to expire it as you want, but in this case it will be automatically expired after 3 hours. ## Fragment Caching If there is some API endpoint that shouldn't be fully cached, you can still optimise it, using Fragment Cache on the attributes and relationships that you want to cache. You can define the attribute by using ```only``` or ```except``` option on cache method. **[NOTE] Cache serializers will be used at their relationships** Example: ```ruby class PostSerializer < ActiveModel::Serializer cache key: 'post', expires_in: 3.hours, only: [:title] attributes :title, :body has_many :comments end ```
Version data entries
5 entries across 5 versions & 1 rubygems