rails如何确定传入的请求格式?

fly*_*r88 11 format controller ruby-on-rails

我只是想知道rails如何知道请求的格式以正确输入着名的:

respond_to do |format|
  format.html
  format.xml
  format.json
end
Run Code Online (Sandbox Code Playgroud)

作为一个例子,考虑一下我面临的这种情况.假设通过javascript(使用jQuery)我发出一个POST请求,说明dataType:json

$.ajax({
      type: 'POST',
      url: 'example.com',
      data: data,
      dataType: 'json'
    });
Run Code Online (Sandbox Code Playgroud)

当这个请求到达控制器动作时,用ruby调试器站在它里面,我检查@ request.format,我可以看到内容类型是application/json.然后控制器按预期响应json格式.

但我对路线中指定的格式符号感到困惑.假设向example.com/parts.json发出请求,但在请求中,内容类型为application/html或application/xml.控制器是响应json格式还是html或xml?

谢谢!

mik*_*son 7

来自ActionController :: MimeResponds:"Rails从客户端提交的HTTP Accept标头中确定所需的响应格式."

  • 基本上:xml是这里注册的mime类型之一https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/mime_types.rb这是你将mime类型连接到的地方:格式符号.该符号用于调用适当的渲染器,该渲染器在ActionController :: Renderers中注册. (2认同)