-
Notifications
You must be signed in to change notification settings - Fork 171
Description
The fetch methods (e.g. fetch_#{association_name}) for loading or accessing an already loaded cached record(s) seems inappropriate because
- It doesn't make it clear to those unfamiliar with this library that the data could come from the cache.
- It makes it easy for those using this library (naturally for performance reasons) to introduce uncached N+1 queries through lazy loading
Problem 1 seems like it came from the fetch method name being taken from Rails.cache.fetch, but the cache context has since been lost. This problem could be avoided by prefixing fetch methods with cache_ (e.g. cache_fetch_#{association_name}), where alias_method could be used for backwards compatibility.
Problem 2 would benefit from having an alternative method that raises instead of lazily loading when the data isn't already loaded (e.g. cacheable_#{association_name}). This alternative method should be used if the data is expected to already be loaded so that it can be used in a loop. Note that the accessed value may not have come from the cache or a cache_fetch_* method, given the Active Record association fallback (hence the suggested cacheable_ prefix).