2011-06-06 2 views
11

Я просто интересно, как рельсы знает формат запроса, чтобы правильно войти в знаменитый:Как рельсы определяют формат входящих запросов?

respond_to do |format| 
    format.html 
    format.xml 
    format.json 
end 

В качестве примера рассмотрим эту ситуацию я столкнулся вверх. Предположим, что с помощью JavaScript (с помощью JQuery) Я делаю запрос POST expliciting DATATYPE: JSon

$.ajax({ 
     type: 'POST', 
     url: 'example.com', 
     data: data, 
     dataType: 'json' 
    }); 

Когда этот запрос действие контроллера досягаемость, стоя внутри него с рубином отладчик, я инспектировать @ request.format и я могу видеть что контент-тип - application/json. Затем контроллер реагирует на формат json, как и ожидалось.

Но я смущен символом формата, определенным на маршрутах. Предположим, что запрос сделан в example.com/parts.json, но в запросе тип содержимого - application/html или application/xml. Контроллер реагирует на формат json или html или xml?

Спасибо!

ответ

7

От ActionController::MimeResponds: «Rails определяет желаемый формат ответа из заголовка HTTP Accept, передаваемого клиентом».

+0

Спасибо! Но я уже не могу понять, что означает символ формата, который отображается в route.rb, например. Потому что, если я отправлю запрос на мой сервер (например, GET /entities.xml), а в моем контроллере у меня есть обработчик xml response_to, заголовок accept сообщает application/XML в инспекторе google chrome. Что-то посередине, которое я еще не понял. Является ли стойка той, которая видит .xml в URL-адресе и в соответствии с этим строит подходящий запрос с подходящими принимающими заголовками? Еще раз спасибо! – flyer88

+2

В основном: xml - один из типов mime, зарегистрированных здесь https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/mime_types.rb. Здесь вы соединяете тип mime с : символ формата. Этот символ используется для вызова соответствующего средства визуализации, которое зарегистрировано в ActionController :: Renderers. – mikewilliamson

Смежные вопросы