2012-02-22 8 views
11

अब तक मुझे रेल में सत्य होने के लिए request.format.json? के दो तरीके मिल गए हैं (यानी जहां आने वाले अनुरोध को JSON के रूप में माना जाता है)। एक यह है कि यदि आप संसाधन का अनुरोध करते हैं और .json में समाप्त करते हैं तो दूसरा यह है कि यदि आप अपने अनुरोध में हेडर Accept: application/json प्रदान करते हैं। प्रत्येक काम अकेले खड़े हो जाओ।रेल: वैकल्पिक स्वीकृति का इलाज कैसे करें: सामग्री-प्रकार जेएसओएन के रूप में?

मैं इस दूसरे मामले के लिए मेरे अपने "स्वीकार करता है" प्रकार पंजीकृत करना चाहते हैं:

Accept: application/vnd.myapp_v1+json और इस .json संलग्न करने के लिए आवश्यकता के बिना application/json की तरह एक "json अनुरोध" के रूप में रेल द्वारा इलाज किया है।

मेरा पहला विचार मेरा खुद का माइमटाइप :json (मेरे प्रारंभिक कोड के भीतर) के रूप में पंजीकृत करना था, लेकिन यह वास्तव में एप्लिकेशन/जेसन के लिए समर्थन तोड़ देगा, न कि मैं क्या करना चाहता हूं।

Mime::Type.register "application/vnd.myapp_v1+json", :json # my failed attempt 

उत्तर

8

हम iPhone अनुरोध एचटीएमएल के लिए खत्म हो हमारे अनुप्रयोग में एक before_filter के साथ इतना की तरह ले जाने के:

before_filter :determine_format 

def determine_format 
    request.format = :iphone if (request.env["HTTP_USER_AGENT"] =~ /iPhone/ && request.format == :html) 
end 

मैं तुम्हें अपने विशिष्ट प्रारूप के साथ इसी तरह कुछ कर सकते हैं की कल्पना है, शायद इस तरह:

def determine_format 
    request.format = :json if (request.format == 'application/vnd.myapp_v1+json') 
end 
+0

पूरी तरह से काम करता है! आपके उत्तर के लिए धन्यवाद। –

8

इस के लिए एक विकल्प है:

api_mime_types = %W(
    application/vnd.api+json 
    text/x-json 
    application/json 
) 

Mime::Type.unregister :json 
Mime::Type.register 'application/json', :json, api_mime_types 

initializers/mime_types.rb में।

संबंधित मुद्दे