From 87899cfcf0ada140764acf4393eb862698449f54 Mon Sep 17 00:00:00 2001 From: Steven Harman Date: Tue, 26 Jul 2016 11:28:03 -0400 Subject: Use to_a to pre-buffer the collection We can safely assume we're not dealing with an infinite collection as we're about to call `each` on it and collect the results until it terminates on its own. Given that, `to_a` is implemented by the normal Array-like objects, and less Array-like objects like `Enumerator` and `Enumerator::Lazy`. --- actionview/CHANGELOG.md | 10 +++++----- actionview/lib/action_view/renderer/partial_renderer.rb | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md index 987d062540..7754bd8dd9 100644 --- a/actionview/CHANGELOG.md +++ b/actionview/CHANGELOG.md @@ -1,11 +1,11 @@ * Changed partial rendering with a collection to allow collections which - don't implement `to_ary`. + implement `to_a`. - Extracting the collection option has an optimization to avoid unnecessary - queries of ActiveRecord Relations by calling `to_ary` on the given + Extracting the collection option had an optimization to avoid unnecessary + queries of ActiveRecord Relations by calling `#to_ary` on the given collection. Instances of `Enumerator` or `Enumerable` are valid - collections, but they do not implement `#to_ary`. They will now be - extracted and rendered as expected. + collections, but they do not implement `#to_ary`. By changing this to + `#to_a`, they will now be extracted and rendered as expected. *Steven Harman* diff --git a/actionview/lib/action_view/renderer/partial_renderer.rb b/actionview/lib/action_view/renderer/partial_renderer.rb index c2b6e6a290..7c2e07185c 100644 --- a/actionview/lib/action_view/renderer/partial_renderer.rb +++ b/actionview/lib/action_view/renderer/partial_renderer.rb @@ -403,9 +403,8 @@ module ActionView def collection_from_options if @options.key?(:collection) - collection = @options[:collection] || [] - collection = collection.to_ary if collection.respond_to?(:to_ary) - collection + collection = @options[:collection] + collection ? collection.to_a : [] end end -- cgit v1.2.3