Merge pull request #22854 from jcoyne/missing_template

Default rendering behavior if respond_to collector doesn't have a block.
This commit is contained in:
Sean Griffin 2016-03-11 10:29:10 -07:00
commit 3bfda09fa0
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*
* Add `ActionController::Parameters#dig` on Ruby 2.3 and greater, which
behaves the same as `Hash#dig`.

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 }