2012-01-02 13 views
8

दहाड़ (https://github.com/apotonick/roar) का उपयोग करना और ActiveRecord या किसी दृश्य-टेम्पलेट का उपयोग कर के बिना मैं चाहता हूँ:रेल 3 और JSON: डिफ़ॉल्ट रेंडरर लेकिन कस्टम माइम प्रकार

  • डिफ़ॉल्ट JSON rederer का उपयोग, लेकिन मेरी खुद माइम प्रकार respond_with साथ JSON प्रस्तुत करना
  • डिफ़ॉल्ट JSON पार्सर लेकिन मेरे खुद माइम प्रकार का उपयोग पैरामीटर हैश में बाद शरीर की प्रविष्टियों डाल करने के लिए।

config/initializers/mime_types.rb:

Mime::Type.register "application/vnd.xxx-v1+json" , :xxx_v1 

नियंत्रकों/API/base_controller.rb

class Api::V1::BaseController < ActionController::Base 
    respond_to :xxx_v1 

    ActionController.add_renderer :xxx_v1 do |obj, options| 
    json = obj.to_json 
    self.content_type ||= Mime::Type.lookup('application/vnd.xxx-v1+json') 
    self.response_body = json 
    end 
end 

नियंत्रकों/API/user_controller.rb:

class Api::V1::UsersController < Api::V1::BaseController 

    def index 
    respond_with User.all 
    end 
end 

http://domain/users स्वीकार करें आवेदन/vnd.xxx-v1

त्रुटि: अनुपलब्ध टेम्पलेट एपीआई/वी 1/उपयोगकर्ता/इंडेक्स, एपीआई/वी 1/बेस/इंडेक्स {: हैंडलर => [: erb,: builder],: format => [: xxx_v1],: भाषा => [: en, द]}

Rails Custom Renderer या rails 3 response format and versioning using vendor MIME type in the Accept header जैसे कई पदों को पढ़ने के बाद मैं अभी भी यह काम .. नहीं मिल सकता है

- === छोटे अद्यतन == = -

जब मैं सीधे नियंत्रक में रेंडर का उपयोग करता हूं, तो यह काम कर रहा है! हमेशा respond_with के साथ समस्याओं ...

render :xxx_v1 => User.all 

उत्तर

3

समाधान:

अपने मॉडलों में एक खाली विधि डालें:

def to_xxx_v1 
end 

इसे नहीं कहा जाता है लेकिन respond_with के लिए उपस्थित होना है।

4

कस्टम माइम प्रकार के साथ http निकायों का स्वत: पार्स करने के लिए कार्य करें: config/initializers/mime_types.rb: प्रतिपादन के लिए

ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::Type.lookup('application/vnd.xxx_v1+json')]=lambda do |body| 
    JSON.parse(body) 
end 
+0

यह ऊपर बताए गए एक अलग, हालांकि अभी भी दिलचस्प सवाल का जवाब देता है, यानी, यह जवाब "मैं कैसे पर्स करना चाहता हूं" जबकि ऊपर दिए गए सवाल से पूछता है कि "मैं कैसे प्रस्तुत करूं।" –

+0

लेकिन मेरे प्रश्न में "डिफ़ॉल्ट JSON पार्सर का उपयोग करें, लेकिन मेरा खुद का माइम प्रकार"; डी – Ginkgochris

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