Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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.
  • Loading branch information...
commit 449a4fc0957748bca3bddf6a15e4d2ae72e2898f 1 parent 3eb5be6
Piotr Sarnacki drogus authored
10 actionpack/lib/action_view/renderer/partial_renderer.rb
View
@@ -221,6 +221,14 @@ def render(context, options, block)
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
@@ -273,8 +281,6 @@ def setup(context, options, block)
@block = block
@details = extract_details(options)
- @lookup_context.rendered_format ||= formats.first
-
if String === partial
@object = options[:object]
@path = partial
13 actionpack/test/controller/render_test.rb
View
@@ -543,6 +543,10 @@ def partial
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") }
@@ -1267,6 +1271,15 @@ def test_should_render_html_formatted_partial
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
1  actionpack/test/fixtures/test/_partial_html_erb.html.erb
View
@@ -0,0 +1 @@
+<%= "partial.html.erb" %>
Please sign in to comment.
Something went wrong with that request. Please try again.