2014-08-30 14 views
8

के लिए डाकिया अनुरोध कैसे बनाएं, इससे कोई फर्क नहीं पड़ता कि मैं इस अनुरोध के कच्चे हिस्से को कैसे प्रारूपित करता हूं, मैं नीचे पार्सिंग त्रुटि से नहीं बच सकता।रेल पोस्ट विधि

मैं उदहारण देते हैं कि नियंत्रक संदेश ध्वनि है एक विधि बनाने कि कल्पना गुजरता के साथ एक रेल एपीआई है,:

describe "POST power_up" do 

    let!(:client) { FactoryGirl.create :client, name: "joe", auth_token: "asdfasdfasdfasdfasdfasdf" } 

    it "should create and save a new Power Up" do 

     expect { post :create, format: :json, power_up: FactoryGirl.attributes_for(:power_up) }.to change(V1::PowerUp, :count).by(1) 
    end 

    end 

मैं डाकिया उपयोग कर रहा हूँ यह करने के लिए पोस्ट करने की कोशिश करने के लिए। कोई फर्क नहीं पड़ता कि मैं क्या करने की कोशिश मैं त्रुटि हो रही है:

Started POST "/v1/power_ups.json" for 127.0.0.1 at 2014-08-30 18:05:29 -0400 
Error occurred while parsing request parameters. 
Contents: 

{ 
    'name': 'foo', 
    'description': 'bar' 
} 


ActionDispatch::ParamsParser::ParseError (795: unexpected token at '{ 
    'name': 'foo', 
    'description': 'bar' 
} 

डाकिया अनुरोध स्थापना:

screen cap of postman request

मैं भी कोशिश की है:

{ 
    'power_up': { 
    'name': 'foo', 
    'description': 'bar' 
    } 
} 

कोड विधि बनाने से और power_ups_controller.rb में मजबूत पैरामीटर घोषणा:

def create 
    @power_up = PowerUp.new(power_up_params) 

    if @power_up.save! 
    redirect_to @power_up 
    end 
end 

private 

    def power_up_params 
    params.require(:power_up).permit(:name, :description) 
    end 

उत्तर

5

एकल उद्धरण (') वास्तव में JSON में कानूनी string delimiter नहीं हैं: एक स्ट्रिंग को डबल कोट्स (") में संलग्न किया जाना चाहिए। आप ब्राउजर में इससे दूर हो सकते हैं, क्योंकि वे जावास्क्रिप्ट में स्ट्रिंग डिलीमीटर हैं। आप आसानी से एक आईआरबी सत्र

JSON.parse(%q[{'foo': 'bar'}]) #=> raises JSON::ParserError 
JSON.parse(%q[{"foo": "bar"}]) #=> ok 

इसके अलावा में यह दोहराने, अपने कल्पना दिया आप अर्थात

{ 
    "power_up": { 
    "name": "foo", 
    "description": "bar" 
    } 
} 
+0

आपने मुझे यह करीब दिखाई दिया है। हालांकि मुझे निम्न मिलता है: 'एक्शन कंट्रोलर :: पैरामीटर मिसिंग (पैराम गायब है या मान खाली है: power_up): '। मैंने संलग्न घुंघराले ब्रैकेट को हटाने की भी कोशिश की। –

+0

इसका मतलब है कि डेटा आपके नियंत्रक द्वारा स्थापित मजबूत पैरामीटर आवश्यकताओं से मेल नहीं खाता है। –

+0

मैंने मजबूत पैरा जोड़ दिए हैं और उपरोक्त विधियां बनाईं हैं। एक quirk है, कि 'PowerUp' मॉड्यूल 'V1' के भीतर है। –

9

क्षमा बिट बहुत देर हो चुकी दूसरी प्रपत्र का उपयोग किया जाना चाहिए इस जवाब देने के लिए लेकिन किसी और मदद कर सकता है कर सकते हैं।

तुम सब करने की ज़रूरत है अपने अनुरोध हेडर में - जोड़ने

Content-Type = 'application/json'

वैकल्पिक रूप से, आप भी कर्ल के साथ यह कोशिश कर सकते हैं (स्रोत) (डाकिया या जो भी ग्राहक में) है:

curl -X POST -H "Content-Type: application/json" -d '{"power_up": { "name": "foo", "description": "bar" } }' 127.0.01:3000/v1/power_ups.json

+0

कच्चे-जेसन बॉडी का उपयोग करते समय मैं हमेशा' सामग्री-प्रकार: एप्लिकेशन/जेसन 'जोड़ना भूल जाता हूं यदि सेट नहीं है, तो मेरे पैरा मौजूद नहीं हैं (रेल नियंत्रक में) उत्तर के लिए धन्यवाद, यह मुझे बहुत कुछ प्राप्त करता है! – mattLummus

6

@ टीजेस पटेल ने कहा कि यह हेडर के बारे में है। लेकिन इसके बजाय उन्हें स्पष्ट रूप से स्थापित करने की तुम सिर्फ कर सकते हैं:

  1. body टैब पर अनुरोध निर्माण क्षेत्र स्विच में। raw रेडियो बटन सेट करें। कम पाठ क्षेत्र इनपुट में अपने शरीर:

    { "power_up": { "name": "foo", "description": "bar" } }

  2. फिर rigth करने के लिए एक ड्रॉपडाउन सूची में बजाय JSON (application/json) विकल्प डिफ़ॉल्ट रूप Text विकल्प चुनें। वह आवश्यक हेडर ऑटो-सेट करेगा। यही वह है - आप "भेजें" बटन दबा सकते हैं।

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