2011-06-06 6 views
11

मैं बस सोच रहा हूँ कैसे रेल अनुरोध का स्वरूप जानता है के रूप में सही ढंग से प्रसिद्ध में प्रवेश करने के लिए:रेल आने वाले अनुरोध प्रारूप को कैसे निर्धारित करते हैं?

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

एक उदाहरण के रूप इस स्थिति मैं सामना करना पड़ा है पर विचार करें। मान लीजिए कि जावास्क्रिप्ट के माध्यम से (jQuery का उपयोग कर) मैं एक पोस्ट अनुरोध डेटाप्रकार expliciting बनाने: इस अनुरोध पहुंच नियंत्रक कार्रवाई, माणिक डीबगर के साथ इसके अंदर चली आ रही है, मैं का निरीक्षण जब @ request.format json

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

और मैं देख सकता हूँ वह सामग्री-प्रकार एप्लिकेशन/जेसन है। फिर नियंत्रक अपेक्षित के रूप में जेसन प्रारूप का जवाब देता है।

लेकिन मैं मार्गों में निर्दिष्ट प्रारूप प्रतीक के साथ उलझन में हूं। मान लीजिए कि example.com/parts.json पर अनुरोध किया गया है लेकिन अनुरोध में सामग्री प्रकार एप्लिकेशन/एचटीएमएल या एप्लिकेशन/एक्सएमएल है। क्या नियंत्रक जेसन प्रारूप या एचटीएमएल या एक्सएमएल का जवाब दे रहा है ??

धन्यवाद!

उत्तर

7

ActionController::MimeResponds से: "रेल क्लाइंट द्वारा सबमिट किए गए HTTP स्वीकार किए गए हेडर से वांछित प्रतिक्रिया प्रारूप निर्धारित करता है।"

+0

धन्यवाद! लेकिन मैं पहले से ही समझ नहीं पा रहा हूं कि इसका मतलब क्या है: प्रारूप प्रतीक जो रूट.आरबी में दिखाई देता है उदाहरण के लिए। क्योंकि अगर मैं अपने सर्वर से अनुरोध भेजता हूं (उदाहरण के लिए GET /entities.xml) और मेरे नियंत्रक में मेरे पास xml answer_to हैंडलर है, तो स्वीकृति हेडर Google क्रोम इंस्पेक्टर में एप्लिकेशन/एक्सएमएल कहता है। बीच में कुछ ऐसा है जो मुझे पहले से ही समझा नहीं गया है। क्या वह रैक है जो यूआरएल में .xml देखता है और इसके अनुसार यह एप्राइपिएट स्वीकार करता है एप्राइपिएट स्वीकार करने वाले हेडर के साथ अनुरोध? एक बार फिर धन्यवाद! – flyer88

+2

मूल रूप से: xml यहां पंजीकृत माइम प्रकारों में से एक है https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/mime_types.rb वह जगह है जहां आप माइम प्रकार को कनेक्ट करते हैं प्रारूप प्रतीक। उस प्रतीक का उपयोग उचित रेंडरर को कॉल करने के लिए किया जाता है, जो एक्शनकंट्रोलर :: रेंडरर्स के साथ पंजीकृत है। – mikewilliamson