2012-05-23 12 views
5

के साथ POST/PUT का उपयोग करके मैं इसे थोड़ी देर के लिए देख रहा हूं, और वर्तमान में नुकसान में हूं। मैंने जेएसओएन से संबंधित होने के लिए समस्या को कम कर दिया है, और जेएसओएन एक सुस्पष्ट प्रारूप में नहीं भेजा जा रहा है।रेल 3.2 - सक्रिय संसाधन - JSON

हम पहले रेल 3.0.7 का उपयोग कर रहे थे (जहां समस्या का वर्णन करने वाला मैं अस्तित्व में नहीं था)। हमें कुछ नई कार्यक्षमताओं का लाभ उठाने के लिए रेल को अपग्रेड करना होगा - लेकिन अब यह समस्या है। मुझे इस बिंदु पर लगभग यकीन है कि यह एक साधारण विन्यास या कुछ है, लेकिन मुझे इसके बारे में कुछ और आंखों की ज़रूरत है।

हम ActiveResource ऑब्जेक्ट्स का उपयोग कर रहे हैं, और ऑब्जेक्ट के मानों को सेट करने और इसे सहेजने (इस प्रकार एक पुट बनाने) पर, हमें अब 403 मिलते हैं: निषिद्ध वेब सेवा से निषिद्ध है। यह वेब सेवा परत पर कोई समस्या नहीं है।

एक नई वस्तु बनाने और पोस्ट करने पर, हमें 40 9 मिल रहे हैं: संघर्ष वापस लौटाया गया है क्योंकि यह डिफ़ॉल्ट मानों के साथ डेटाबेस को अद्यतन करने का प्रयास करता है - इस प्रकार जिसका अर्थ है कि जेसन डेटा सेवा तक नहीं पहुंच रहा है - या यह सुगम नहीं है।

मेरी समस्या यह है कि यह रेल 3.0.7 में काम करता है, और अब 3.2.3 (या 3.1.3 जो मैंने कोशिश की) में काम नहीं करता है। मैं जेएसओएन डेटा के अलावा अन्य सुझावों के लिए खुला हूं, हालांकि मुझे पूरा यकीन है कि यही वह मुद्दा है जहां समस्या है।

ActiveResource::Base.include_root_in_json = false 
ActiveSupport::JSON.backend = "json_gem" 

किसी भी सुझाव के लिए धन्यवाद:

मेरे ActiveResource मॉडल

self.format = :json 

मैं अपने प्रारंभकर्ता फ़ाइलों में से एक में निम्न होना है!

अद्यतन

मैं कर्ल के साथ बाहर का परीक्षण किया गया है और यह द्वारा काम करने के लिए गया:

curl -H "Content-Type: application/json" -d "{\"userID\":\"xxx\", \"label\":\"doc.test.test\", \"value\":\"1,19\", \"id\":\"-1\"}" -v -X POST http://host:port/usermanagement/users/xxx/prefs 

मुझे मिल गया है कि काम करने के लिए, लेकिन

  1. यह सामग्री दिखाई देता है -टाइप हेडर स्पष्ट रूप से सेट होना चाहिए अन्यथा यह 415 में परिणाम: मीडिया अपरिचित त्रुटि

  2. यदि मैं ActiveResource ऑब्जेक्ट में सामग्री-प्रकार शीर्षलेख सेट करता हूं, तो मुझे अभी भी 40 9 मिलती है: संघर्ष त्रुटि - जो मुझे विश्वास करती है कि JSON अभी भी ठीक तरह से गठित नहीं है।

संपादित करें (फिर से)

मैं पता लगा है जहां JSON के साथ मुद्दा है - रेल JSON में जड़ बना रहा हो। इस प्रकार के बजाय संसाधन वापस

{"name":"value", "name":"value"} 

के रूप में भेजने की यह

{"ResourceName": {"name":"value", "name":"value"}} 

हालांकि भेज रहा है, मैं गलत पर include_root_in_json निर्धारित किया है - मैं दोनों प्रारंभकर्ता फाइलों में यह करने की कोशिश की, और सीधे मॉडल अपने आप में , और कोई बदलाव नहीं।

+2

तो मैं इस अपने मॉडल में 'to_json' विधि अधिभावी बस' वापस जाने के लिए self.attributes.to_json' द्वारा "निर्धारित" - हालांकि, अगर किसी के पास विचार है कि 'include_root_in_json' कॉन्फ़िगरेशन क्यों काम नहीं कर रहा है, तो भी मैं बहुत उत्सुक हूं क्योंकि मुझे लगता है कि कॉन्फ़िगरेशन एक और अधिक शानदार समाधान होगा। धन्यवाद! – Krista

+0

आप समाधान को उत्तर के रूप में जोड़ना चाहते हैं और इसे स्वीकार कर सकते हैं ... – Smar

+0

धन्यवाद! अच्छा विचार – Krista

उत्तर

1

तो मैं "तय" यह मेरा मॉडल में to_json विधि अधिभावी द्वारा (इसके चारों ओर काम किया) बस वापस जाने के लिए self.attributes.to_json

class Document < ActiveResource::Base 
    self.site += 'user/:user_id' 
    self.element_name = "docs" 

    def to_json(options={}) 
    self.attributes.to_json(options) 
    end 
end 
1

लगता ActiveResource :: Base.include_root_in_json की तरह रेल में टूट गया है 3-2- स्थिर (3.2.13 सहित)। यह समस्या स्टैंडअलोन activeresource रेपो में तय किया गया है:

def to_json(options={}) 
    super(include_root_in_json ? { :root => self.class.element_name }.merge(options) : options) 
end 

आप बंदर यह आपके initializers में से एक में ही बात कर रहे द्वारा पैच कर सकते हैं।

अद्यतन: यह समस्या रेल 3-2 स्थिर में तय किया गया है backport commit

+0

3-2-स्थिर ने इस पैच पुल अनुरोध को विलय कर दिया है। अगले संस्करण 3.2.14 में यह फिक्स शामिल होगा। – Dingle

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