respond_to
- это не только способ узнать, какой тип ответа ожидал клиент , но и способ сообщить rails
, какой тип ответа вы готовы предоставить.
Например, простой сценарий, где у нас есть этот контроллер:
class SimpleController < ApplicationController
def index
respond_to :html, :json
end
end
Клиент отправляет запрос, ожидая ответа xml
curl -H "Accept: application/xml" \
-H "Content-Type: application/xml" \
-X GET "host:port/simple/index"
Rails ответит с 406
Completed 406 Not Acceptable in 0ms (ActiveRecord: 0.0ms)
Однако, если вы просто отфильтруете request.format
, используя case
, как в вашем примере, клиент получит ошибку 500
, поскольку rails
не может найти соответствующий шаблон для формата запроса.
Конечно, вы также можете вызвать respond_to
на уровне class , а также указать формат ответа в rout.rb
Погружение в rails
исходный код и APIдокументация, если вы хотите получить более подробное объяснение этому.