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.
This commit is contained in:
Piotr Sarnacki 2012-03-26 22:37:36 +02:00
parent 19901c6c61
commit 67b2404cf9
3 changed files with 22 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1 @@
<%= "partial.html.erb" %>