2011-06-06 63 views
11

我只是想知道如何軌知道請求的格式,如著名的正確輸入:rails如何確定傳入的請求格式?

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

例如,考慮這種情況下,我面臨了。假設通過JavaScript(使用jQuery)我做一個POST請求expliciting 數據類型: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

謝謝!但是我不明白什麼是指例如在routes.rb中出現的格式符號。因爲如果我向我的服務器發送請求(例如GET /entities.xml)並在我的控制器中有一個xml respond_to處理程序,那麼accept標頭會在google chrome檢查器中顯示application/XML。中間有些東西我還沒有明白。機架是在URL中看到.xml的機架,並根據它建立適當的REQUEST並使用適當的接受頭文件?再次感謝! – flyer88 2011-06-06 17:50:48

+2

基本上:xml是在這裏註冊的mime類型之一https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/mime_types.rb這就是您將MIME類型與:格式符號。該符號用於調用相應的渲染器,該渲染器已在ActionController :: Renderer中註冊。 – mikewilliamson 2011-06-07 20:53:59