aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/helpers/cache_helper.rb
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2016-07-21 08:59:41 +0200
committerGitHub <noreply@github.com>2016-07-21 08:59:41 +0200
commitcf5bc0dd5359e61dcb93e719279c7198e68a0eb8 (patch)
tree1bc639fa603601c7f90a285e3e34d0c19060654e /actionview/lib/action_view/helpers/cache_helper.rb
parentb334c19c0746fce218faf73bbb8594915fdfcf0a (diff)
parent714c763dad908d6f70df978f7bb1de950b382d67 (diff)
downloadrails-cf5bc0dd5359e61dcb93e719279c7198e68a0eb8.tar.gz
rails-cf5bc0dd5359e61dcb93e719279c7198e68a0eb8.tar.bz2
rails-cf5bc0dd5359e61dcb93e719279c7198e68a0eb8.zip
Merge pull request #25616 from ignatiusreza/callable_cache_key
Bring back support for callable cache key when rendering collection
Diffstat (limited to 'actionview/lib/action_view/helpers/cache_helper.rb')
-rw-r--r--actionview/lib/action_view/helpers/cache_helper.rb15
1 files changed, 12 insertions, 3 deletions
diff --git a/actionview/lib/action_view/helpers/cache_helper.rb b/actionview/lib/action_view/helpers/cache_helper.rb
index 4eaaa239e2..e28b02f015 100644
--- a/actionview/lib/action_view/helpers/cache_helper.rb
+++ b/actionview/lib/action_view/helpers/cache_helper.rb
@@ -130,9 +130,10 @@ module ActionView
#
# When rendering a collection of objects that each use the same partial, a `cached`
# option can be passed.
+ #
# For collections rendered such:
#
- # <%= render partial: 'notifications/notification', collection: @notifications, cached: true %>
+ # <%= render partial: 'projects/project', collection: @projects, cached: true %>
#
# The `cached: true` will make Action View's rendering read several templates
# from cache at once instead of one call per template.
@@ -142,13 +143,21 @@ module ActionView
# Works great alongside individual template fragment caching.
# For instance if the template the collection renders is cached like:
#
- # # notifications/_notification.html.erb
- # <% cache notification do %>
+ # # projects/_project.html.erb
+ # <% cache project do %>
# <%# ... %>
# <% end %>
#
# Any collection renders will find those cached templates when attempting
# to read multiple templates at once.
+ #
+ # If your collection cache depends on multiple sources (try to avoid this to keep things simple),
+ # you can name all these dependencies as part of a block that returns an array:
+ #
+ # <%= render partial: 'projects/project', collection: @projects, cached: -> project { [ project, current_user ] } %>
+ #
+ # This will include both records as part of the cache key and updating either of them will
+ # expire the cache.
def cache(name = {}, options = {}, &block)
if controller.respond_to?(:perform_caching) && controller.perform_caching
name_options = options.slice(:skip_digest, :virtual_path)