aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Harman <steven@harmanly.com>2016-07-26 11:28:03 -0400
committerSteven Harman <steven@harmanly.com>2016-07-26 11:33:34 -0400
commit87899cfcf0ada140764acf4393eb862698449f54 (patch)
tree81aaa29290071f035408bdcdefdb685f058bee11
parente4a4936244988f76318a0b219a3cc0bcdcdf3e30 (diff)
downloadrails-87899cfcf0ada140764acf4393eb862698449f54.tar.gz
rails-87899cfcf0ada140764acf4393eb862698449f54.tar.bz2
rails-87899cfcf0ada140764acf4393eb862698449f54.zip
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`.
-rw-r--r--actionview/CHANGELOG.md10
-rw-r--r--actionview/lib/action_view/renderer/partial_renderer.rb5
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