mirror of https://github.com/rails/rails
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:
parent
19901c6c61
commit
67b2404cf9
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
<%= "partial.html.erb" %>
|
Loading…
Reference in New Issue