Render default template if block doesn't render

When a `respond_to` collector doesn't have a response, then a
`:no_content` response should be rendered. This brings the default
rendering behavior introduced by
https://github.com/rails/rails/issues/19036 to controller methods
employing `respond_to`
This commit is contained in:
Justin Coyne 2015-12-30 12:59:23 -06:00
parent 46cb45df48
commit 48f140cf74
3 changed files with 23 additions and 1 deletions

View File

@ -1,3 +1,10 @@
* When a `respond_to` collector with a block doesn't have a response, then
a `:no_content` response should be rendered. This brings the default
rendering behavior introduced by https://github.com/rails/rails/issues/19036
to controller methods employing `respond_to`
*Justin Coyne*
* Update default rendering policies when the controller action did
not explicitly indicate a response.

View File

@ -198,7 +198,7 @@ module ActionController #:nodoc:
_process_format(format)
_set_rendered_content_type format
response = collector.response
response ? response.call : render({})
response.call if response
else
raise ActionController::UnknownFormat
end

View File

@ -74,6 +74,14 @@ class RespondToController < ActionController::Base
end
end
def missing_templates
respond_to do |type|
# This test requires a block that is empty
type.json { }
type.xml
end
end
def using_defaults_with_type_list
respond_to(:html, :xml)
end
@ -624,6 +632,13 @@ class RespondToControllerTest < ActionController::TestCase
end
end
def test_missing_templates
get :missing_templates, format: :json
assert_response :no_content
get :missing_templates, format: :xml
assert_response :no_content
end
def test_invalid_variant
assert_raises(ActionController::UnknownFormat) do
get :variant_with_implicit_template_rendering, params: { v: :invalid }