aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@github.com>2019-02-13 11:21:57 -0800
committerGitHub <noreply@github.com>2019-02-13 11:21:57 -0800
commitaf6ade0cfd09e3d3d9ebd304a2afae4d60a044dc (patch)
tree38fc87664f5bfcabfb9cac7cf9f57e0c083228bd /actionview
parentb4dd69e59b3cb5c34bd58339d5b9a749e2cd82f3 (diff)
parentbfcdd46614407d6bf1c955aad6ed4aa3094d2189 (diff)
downloadrails-af6ade0cfd09e3d3d9ebd304a2afae4d60a044dc.tar.gz
rails-af6ade0cfd09e3d3d9ebd304a2afae4d60a044dc.tar.bz2
rails-af6ade0cfd09e3d3d9ebd304a2afae4d60a044dc.zip
Merge pull request #35253 from rails/cached-collections-must-have-a-template
Cached collections only work if there is one template
Diffstat (limited to 'actionview')
-rw-r--r--actionview/lib/action_view/renderer/partial_renderer.rb14
-rw-r--r--actionview/test/template/render_test.rb11
2 files changed, 22 insertions, 3 deletions
diff --git a/actionview/lib/action_view/renderer/partial_renderer.rb b/actionview/lib/action_view/renderer/partial_renderer.rb
index 800a62eaa1..f8a6f13ae9 100644
--- a/actionview/lib/action_view/renderer/partial_renderer.rb
+++ b/actionview/lib/action_view/renderer/partial_renderer.rb
@@ -308,6 +308,9 @@ module ActionView
template = find_partial(@path, @template_keys)
@variable ||= template.variable
else
+ if options[:cached]
+ raise NotImplementedError, "render caching requires a template. Please specify a partial when rendering"
+ end
template = nil
end
@@ -337,9 +340,14 @@ module ActionView
spacer = find_template(@options[:spacer_template], @locals.keys).render(view, @locals)
end
- cache_collection_render(payload, view, template) do
- template ? collection_with_template(view, template) : collection_without_template(view)
- end.join(spacer).html_safe
+ collection_body = if template
+ cache_collection_render(payload, view, template) do
+ collection_with_template(view, template)
+ end
+ else
+ collection_without_template(view)
+ end
+ collection_body.join(spacer).html_safe
end
end
diff --git a/actionview/test/template/render_test.rb b/actionview/test/template/render_test.rb
index 88047fd920..cda8c942d8 100644
--- a/actionview/test/template/render_test.rb
+++ b/actionview/test/template/render_test.rb
@@ -770,6 +770,17 @@ class CachedCollectionViewRenderTest < ActiveSupport::TestCase
@view.render(partial: "test/cached_customer", collection: [customer], cached: true)
end
+ test "collection caching does not work on multi-partials" do
+ a = Object.new
+ b = Object.new
+ def a.to_partial_path; "test/partial_iteration_1"; end
+ def b.to_partial_path; "test/partial_iteration_2"; end
+
+ assert_raises(NotImplementedError) do
+ @controller_view.render(partial: [a, b], cached: true)
+ end
+ end
+
private
def cache_key(*names, virtual_path)
digest = ActionView::Digestor.digest name: virtual_path, finder: @view.lookup_context, dependencies: []