diff options
author | Piotr Sarnacki <drogus@gmail.com> | 2012-03-26 22:37:36 +0200 |
---|---|---|
committer | Piotr Sarnacki <drogus@gmail.com> | 2012-03-27 12:14:56 +0200 |
commit | 67b2404cf9b2c7e0f86bf0294571ef97391a6dcd (patch) | |
tree | 9af9c8c3b057426cc13448d0c8e9769d1eeb60d3 | |
parent | 19901c6c61d1900a1452c8b14943a8345463f039 (diff) | |
download | rails-67b2404cf9b2c7e0f86bf0294571ef97391a6dcd.tar.gz rails-67b2404cf9b2c7e0f86bf0294571ef97391a6dcd.tar.bz2 rails-67b2404cf9b2c7e0f86bf0294571ef97391a6dcd.zip |
If partial is rendered in controller, grab format from template
Previously `rendered_format` was set only based on mime types
passed in Accept header, which was wrong if first type from
Accept was different than rendered partial. The fix is to simply
move setting rendered_format to the place where template
is available and grab format from the template. If it fails
we can fallback to formats passed by Accept header.
-rw-r--r-- | actionpack/lib/action_view/renderer/partial_renderer.rb | 10 | ||||
-rw-r--r-- | actionpack/test/controller/render_test.rb | 13 | ||||
-rw-r--r-- | actionpack/test/fixtures/test/_partial_html_erb.html.erb | 1 |
3 files changed, 22 insertions, 2 deletions
diff --git a/actionpack/lib/action_view/renderer/partial_renderer.rb b/actionpack/lib/action_view/renderer/partial_renderer.rb index 232667ec01..d4c652c0d1 100644 --- a/actionpack/lib/action_view/renderer/partial_renderer.rb +++ b/actionpack/lib/action_view/renderer/partial_renderer.rb @@ -257,6 +257,14 @@ module ActionView setup(context, options, block) identifier = (@template = find_partial) ? @template.identifier : @path + @lookup_context.rendered_format ||= begin + if @template && @template.formats.present? + @template.formats.first + else + formats.first + end + end + if @collection instrument(:collection, :identifier => identifier || "collection", :count => @collection.size) do render_collection @@ -316,8 +324,6 @@ module ActionView @block = block @details = extract_details(options) - @lookup_context.rendered_format ||= formats.first - if String === partial @object = options[:object] @path = partial diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index 09d9e65d38..e1f9b7dc9c 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -553,6 +553,10 @@ class TestController < ActionController::Base render :partial => 'partial' end + def partial_html_erb + render :partial => 'partial_html_erb' + end + def render_to_string_with_partial @partial_only = render_to_string :partial => "partial_only" @partial_with_locals = render_to_string :partial => "customer", :locals => { :customer => Customer.new("david") } @@ -1272,6 +1276,15 @@ class RenderTest < ActionController::TestCase assert_equal "text/html", @response.content_type end + def test_render_html_formatted_partial_even_with_other_mime_time_in_accept + @request.accept = "text/javascript, text/html" + + get :partial_html_erb + + assert_equal "partial.html.erb", @response.body.strip + assert_equal "text/html", @response.content_type + end + def test_should_render_html_partial_with_formats get :partial_formats_html assert_equal "partial html", @response.body diff --git a/actionpack/test/fixtures/test/_partial_html_erb.html.erb b/actionpack/test/fixtures/test/_partial_html_erb.html.erb new file mode 100644 index 0000000000..4b54875782 --- /dev/null +++ b/actionpack/test/fixtures/test/_partial_html_erb.html.erb @@ -0,0 +1 @@ +<%= "partial.html.erb" %> |