v6.0.0 - Show latest stable - 0 notes - Class: CollectionCaching
cache_collection_render(instrumentation_payload, view, template) private

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb, line 14
      def cache_collection_render(instrumentation_payload, view, template)
        return yield unless @options[:cached]

        # Result is a hash with the key represents the
        # key used for cache lookup and the value is the item
        # on which the partial is being rendered
        keyed_collection, ordered_keys = collection_by_cache_keys(view, template)

        # Pull all partials from cache
        # Result is a hash, key matches the entry in
        # `keyed_collection` where the cache was retrieved and the
        # value is the value that was present in the cache
        cached_partials = collection_cache.read_multi(*keyed_collection.keys)
        instrumentation_payload[:cache_hits] = cached_partials.size

        # Extract the items for the keys that are not found
        # Set the uncached values to instance variable @collection
        # which is used by the caller
        @collection = keyed_collection.reject { |key, _| cached_partials.key?(key) }.values

        # If all elements are already in cache then
        # rendered partials will be an empty array
        # If the cache is missing elements then
        # the block will be called against the remaining items
        # in the @collection.
        rendered_partials = @collection.empty? ? [] : yield

        index = 0
        keyed_partials = fetch_or_cache_partial(cached_partials, template, order_by: keyed_collection.each_key) do
          # This block is called once
          # for every cache miss while preserving order.
          rendered_partials[index].tap { index += 1 }
        end do |key|
Register or log in to add new notes.