2011-08-23 11 views
5

डिफ़ॉल्ट कॉलिंग rails.model.to_jsonमैं रेल 3 सत्यापन त्रुटि जेसन आउटपुट को कैसे अनुकूलित कर सकता हूं?

तक कुछ इस तरह प्रदर्शित करेगा:

{"name":["can't be blank"],"email":["can't be blank"],"phone":["can't be blank"]} 
संदेश की बजाय

मैं कुछ स्थिति कोड सेवा ग्राहक पर इस्तेमाल किया जा सकता उत्पन्न करने के लिए की जरूरत है:

[{"field": "name", "code": "blank"}, {"field": "email", "code": "blank"}] 

यह दृष्टिकोण github api v3 त्रुटियों के समान है - http://developer.github.com/v3/

मैं रेल के साथ इसे कैसे प्राप्त कर सकता हूं रों?

+0

एक और समान प्रश्न। http://stackoverflow.com/questions/5911470/api-errors-customization-for-rails-3-like-github-api-v3। इसके अलावा कोई जवाब नहीं = \ –

+0

इस धागे में, रेल "उत्तरदाताओं" का उपयोग उसको प्राप्त करने के लिए किया जाता है। http://stackoverflow.com/questions/5911470/api-errors- अनुकूलन-for-rails-3-like-github-api-v3 –

उत्तर

0

में मदद करता है अपने मॉडल पर के रूप में json संचालित आप जिस तरह से बदल सकते हैं। उदाहरण के लिए हम मान लें कि आपके पास ActiveRecord मॉडल Contact है। प्रतिपादन व्यवहार को संशोधित करने के लिए आप as_json ओवरराइड कर सकते हैं।

def Contact < ActiveRecord::Base 

    def as_json 
    hash = super 

    hash.collect {|key, value| 
     {"field" => key, "code" => determine_code_from(value)} 
    } 
    end 

end 

बेशक, आप भी एक अलग विधि में json Contact पर या यहाँ तक कि नियंत्रक में उत्पन्न कर सकता है। आपको बस अपनी रेंडर विधि को थोड़ा बदलना होगा।

render @contact.as_my_custom_json 
+0

मान इस तरह की स्ट्रिंग है "खाली नहीं हो सकता"। संदेश के बजाय त्रुटि प्रकार प्राप्त करने का कोई तरीका हो सकता है। –

+0

त्रुटि प्रकार से आपका क्या मतलब है? सभी सत्यापन एक ही त्रुटि उठाते हैं। कुंजी वह क्षेत्र है जो त्रुटि उत्पन्न कर रहा है, और मान संदेश है। आप अपने उदाहरण में "कोड" क्या चाहते हैं? – diedthreetimes

+0

यदि आप किसी और चीज़ के लिए "रिक्त नहीं हो सकते" संदेश का उपयोग नहीं करते हैं, तो बस अपने मॉडल वर्ग में संदेश को ओवरराइड करें ताकि आप कोड बन सकें। उदाहरण के लिए, 'validates_numercality_of: zip_code," 320 "' – diedthreetimes

0

अपने नियंत्रक में, जब आप उत्पादन प्रस्तुत करना, अपने मामले JSON सामग्री में, निम्नलिखित जोड़ें:

render :json => @yourobject, :status => 422 # or whatever status you want. 

आशा इस

+0

डोमिनिक, मैंने अलग-अलग समस्या के बारे में पूछा है। क्षमा करें अगर मेरा प्रश्न स्पष्ट नहीं था। –

+0

और यह अभी भी अस्पष्ट नहीं है, क्योंकि मेरे समाधान के साथ आपके पास वही है जो आपने पूछा (http://developer.github.com/v3/)। आपके पास कुछ ऐसा होगा: HTTP/1.1 400 खराब अनुरोध सामग्री-लंबाई: 35 {"संदेश": "JSON पार्स करने में समस्याएं"} –

+0

त्रुटियों सरणी के साथ प्रतिक्रिया है। मैं इसके बारे में पूछ रहा हूँ। –

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