2013-03-11 11 views
10

अरे लोग मैं सक्रिय मॉडल Serializerमेक रूट नोड Serializer

[ 
    { 
    "contact" : {} 
    }, 
    { 
    "contact" : {} 
    } 
] 

का उपयोग कर इस प्रारूप में अपना रेल App में JSON की एक सरणी है कि मैं यह कैसे कर सकता हूँ ताकि मैं नोड में से एक स्तर से ऊपर को दूर संपर्क इस तरह का उपयोग कर सक्रिय मॉडल serializer:

[ 
{ 
}, 
{ 
} 
] 

मैं भी नोड नाम "संपर्क"

उत्तर

24

यह RailsCast #409 Active Model Serializers में कवर किया गया था निकालना चाहते हैं।

रूट नोड को हटाने के लिए, आप अपने नियंत्रक में render पर कॉल में root: false जोड़ें। अपने ApplicationController में

def index 
    @contacts = Contacts.all 
    respond_to do |format| 
    format.html 
    format.json { render json: @contacts, root: false } 
    end 
end 

या, यदि आप नहीं है किसी भी जड़ नोड्स आपके JSON में से किसी में चाहते हैं,, निम्नलिखित जोड़ें: JSON में अपने contact रों मानते हुए एक contacts#index विधि से आते हैं, अपने कोड की तरह कुछ लग सकता है विधि:

def default_serializer_options 
    {root: false} 
end 
+0

मेरे पास वास्तव में वह सेटअप है। मुझे लगता है मैंने इसे सही ढंग से समझाया नहीं है। ऑब्जेक्ट में संपर्क ऑब्जेक्ट सहित विशेषताओं की एक सूची है और मैंने अन्य सभी विशेषताओं को छुपाया है। मैं बस संपर्क वस्तु रूट होना चाहता हूँ। – Madhan

5

आमतौर पर रूट नोड में डिफ़ॉल्ट रूप से आपके नियंत्रक का नाम होता है यदि मैं गलत नहीं हूं।

format.json { render json: @contacts} 

बेशक आपको रूट झूठी को हटाने की जरूरत है, यह नोड के नाम को हटा देता है।

आप रूट वस्तु उपयोग के रूप में संपर्क करना चाहते हैं इस:

format.json { render json :@contacts, :root => 'contact' } 
4

/config/initializers/serializer.rb

ActiveModelSerializers.config.adapter = :json_api # Default: `:attributes` 

डिफ़ॉल्ट ActiveModelSerializers का उपयोग करेगा द्वारा विशेषताएं एडाप्टर (नहीं JSON रूट)। लेकिन हम आपको JsonApi एडाप्टर का उपयोग करने की दृढ़ता से सलाह देते हैं, जो 1.0 jsonapi.org/format में निर्दिष्ट प्रारूप का पालन करता है। , अपनी एप्लिकेशन को पुनः आरंभ और आप रूट मिलना चाहिए

# config/initializers/serializer.rb 
ActiveModelSerializers.config.adapter = :json 
ActiveModelSerializers.config.json_include_toplevel_object = true 

तब:

2

ActiveModel :: Serializer v0.10.x इस्तेमाल करने वाले लोगों के लिए, आप एक प्रारंभकर्ता बनाने के लिए और शामिल की आवश्यकता होगी निम्नलिखित वस्तुओं की इच्छा है।

यह रेल 5.1.x में काम करता है। YMMV। HTH।

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