diff options
author | George Claghorn <george.claghorn@gmail.com> | 2018-04-13 14:43:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-13 14:43:12 -0400 |
commit | 4f99a2186479d5f77460622f2c0f37708b3ec1bc (patch) | |
tree | 4cf97670f287cfe42f9ec0b5b0f9b457b1bc3019 | |
parent | 998da3cb3479c224279e165e00cb99556c3b4686 (diff) | |
download | rails-4f99a2186479d5f77460622f2c0f37708b3ec1bc.tar.gz rails-4f99a2186479d5f77460622f2c0f37708b3ec1bc.tar.bz2 rails-4f99a2186479d5f77460622f2c0f37708b3ec1bc.zip |
Fix rendering a differently-formatted partial after caching
4 files changed, 26 insertions, 2 deletions
diff --git a/actionpack/test/controller/caching_test.rb b/actionpack/test/controller/caching_test.rb index 8b596083d5..a8f726f181 100644 --- a/actionpack/test/controller/caching_test.rb +++ b/actionpack/test/controller/caching_test.rb @@ -173,6 +173,9 @@ class FunctionalCachingController < CachingController end end + def xml_fragment_cached_with_html_partial + end + def formatted_fragment_cached respond_to do |format| format.html @@ -308,6 +311,11 @@ CACHED @store.read("views/functional_caching/formatted_fragment_cached_with_variant:#{template_digest("functional_caching/formatted_fragment_cached_with_variant")}/fragment") end + def test_fragment_caching_with_html_partials_in_xml + get :xml_fragment_cached_with_html_partial, format: "*/*" + assert_response :success + end + private def template_digest(name) ActionView::Digestor.digest(name: name, finder: @controller.lookup_context) diff --git a/actionpack/test/fixtures/functional_caching/_formatted_partial.html.erb b/actionpack/test/fixtures/functional_caching/_formatted_partial.html.erb new file mode 100644 index 0000000000..aad73c0d6b --- /dev/null +++ b/actionpack/test/fixtures/functional_caching/_formatted_partial.html.erb @@ -0,0 +1 @@ +<p>Hello!</p> diff --git a/actionpack/test/fixtures/functional_caching/xml_fragment_cached_with_html_partial.xml.builder b/actionpack/test/fixtures/functional_caching/xml_fragment_cached_with_html_partial.xml.builder new file mode 100644 index 0000000000..2bdda3af18 --- /dev/null +++ b/actionpack/test/fixtures/functional_caching/xml_fragment_cached_with_html_partial.xml.builder @@ -0,0 +1,5 @@ +cache do + xml.title "Hello!" +end + +xml.body cdata_section(render("formatted_partial")) diff --git a/actionview/lib/action_view/digestor.rb b/actionview/lib/action_view/digestor.rb index dbd7a4ee11..45cf48b3e0 100644 --- a/actionview/lib/action_view/digestor.rb +++ b/actionview/lib/action_view/digestor.rb @@ -45,9 +45,8 @@ module ActionView # Create a dependency tree for template named +name+. def tree(name, finder, partial = false, seen = {}) logical_name = name.gsub(%r|/_|, "/") - finder.formats = [finder.rendered_format] if finder.rendered_format - if template = finder.disable_cache { finder.find_all(logical_name, [], partial, []).first } + if template = find_template(finder, logical_name, [], partial, []) finder.rendered_format ||= template.formats.first if node = seen[template.identifier] # handle cycles in the tree @@ -69,6 +68,17 @@ module ActionView seen[name] ||= Missing.new(name, logical_name, nil) end end + + private + def find_template(finder, *args) + finder.disable_cache do + if format = finder.rendered_format + finder.find_all(*args, formats: [format]).first || finder.find_all(*args).first + else + finder.find_all(*args).first + end + end + end end class Node |