diff options
Diffstat (limited to 'actionview/lib/action_view/renderer/partial_renderer')
-rw-r--r-- | actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb b/actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb index 5a294744e8..4860f00243 100644 --- a/actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb +++ b/actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb @@ -15,13 +15,16 @@ module ActionView return yield unless cache_collection? keyed_collection = collection_by_cache_keys - partial_cache = collection_cache.read_multi(*keyed_collection.keys) + cached_partials = collection_cache.read_multi(*keyed_collection.keys) - @collection = keyed_collection.reject { |key, _| partial_cache.key?(key) }.values - rendered_partials = @collection.any? ? yield.dup : [] + @collection = keyed_collection.reject { |key, _| cached_partials.key?(key) }.values + rendered_partials = @collection.empty? ? [] : yield - fetch_or_cache_partial(partial_cache, order_by: keyed_collection.each_key) do - rendered_partials.shift + index = 0 + keyed_collection.map do |cache_key, _| + cached_partials.fetch(cache_key) do + rendered_partials[index].tap { index += 1 } + end end end @@ -30,8 +33,7 @@ module ActionView end def automatic_cache_eligible? - @template && !callable_cache_key? && - @template.eligible_for_collection_caching?(as: @options[:as]) + @template && @template.eligible_for_collection_caching?(as: @options[:as]) end def callable_cache_key? @@ -51,13 +53,10 @@ module ActionView key.frozen? ? key.dup : key # #read_multi & #write may require mutability, Dalli 2.6.0. end - def fetch_or_cache_partial(cached_partials, order_by:) - order_by.map do |key| - cached_partials.fetch(key) do - yield.tap do |rendered_partial| - collection_cache.write(key, rendered_partial, @options[:cache_options]) - end - end + def collection_cache_rendered_partial(rendered_partial, key_by) + if callable_cache_key? + key = expanded_cache_key(@options[:cache].call(key_by)) + collection_cache.write(key, rendered_partial, @options[:cache_options]) end end end |