2011-06-06 40 views
11

Tôi chỉ tự hỏi như thế nào ray biết định dạng của các yêu cầu để nhập một cách chính xác trong nổi tiếng:Các đường ray xác định định dạng yêu cầu đến như thế nào?

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

Như một ví dụ xem xét tình hình này, tôi đã phải đối mặt lên. Giả sử rằng thông qua javascript (sử dụng jQuery) tôi thực hiện một yêu cầu POST expliciting datatype: json

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

Khi yêu cầu này điều khiển tầm hoạt động, đứng bên trong nó với debugger ruby, tôi kiểm tra @ request.format và tôi có thể nhìn thấy loại nội dung đó là ứng dụng/json. Sau đó, bộ điều khiển đáp ứng định dạng json như mong đợi.

Nhưng tôi nhầm lẫn với biểu tượng định dạng được xác định trong các tuyến đường. Giả sử yêu cầu được thực hiện cho example.com/parts.json nhưng trong yêu cầu, loại nội dung là ứng dụng/html hoặc ứng dụng/xml. Bộ điều khiển có phản hồi định dạng json hay html hay xml không ??

Cảm ơn!

Trả lời

7

Từ ActionController::MimeResponds: "Đường ray xác định định dạng phản hồi mong muốn từ tiêu đề HTTP Accept do ứng dụng khách gửi".

+0

Cảm ơn! Nhưng tôi không thể hiểu những gì có nghĩa là: biểu tượng định dạng xuất hiện trong routes.rb chẳng hạn. Bởi vì nếu tôi gửi một yêu cầu đến máy chủ của tôi (ví dụ GET /entities.xml) và trong bộ điều khiển của tôi, tôi có trình xử lý response_to xml, header chấp nhận cho biết ứng dụng/XML trong thanh tra google chrome. Có điều gì đó ở giữa mà tôi chưa hiểu. Là rack một trong đó nhìn thấy .xml trong url và theo điều này nó xây dựng các REQUEST appropiate với tiêu đề chấp nhận appropiate? Cảm ơn một lần nữa! – flyer88

+2

Về cơ bản: xml là một trong các loại mime được đăng ký tại đây https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/mime_types.rb Đó là nơi bạn kết nối loại mime với : biểu tượng định dạng. Biểu tượng đó được sử dụng để gọi trình kết xuất phù hợp, được đăng ký với ActionController :: Renderers. – mikewilliamson

Các vấn đề liên quan