2012-07-23 6 views
5

मैं रेल पर रूबी में इनपुट फ़ील्ड को मान्य कर रहा हूं। मैं जांच रहा हूं कि उपयोगकर्ता ने इन फ़ील्ड में प्रवेश किया है या नहीं किया है या नहीं। यदि मान लें कि name फ़ील्ड भर नहीं गया है तो संकेत के साथ उपयोगकर्ता को एक त्रुटि संदेश भेजें कि name फ़ील्ड भर नहीं है। अन्य त्रुटियों के साथ ही चला जाता है। रेलवे पर रूबी का उपयोग करके मैं इस तरह का संदेश जेसन में कैसे भेज सकता हूं।रेल पर रूबी का उपयोग करके जेसन में त्रुटि संदेश भेजना

यहां मैं अभी क्या कर रहा हूं।

इस मॉडल

validates :email, :name, :company, :presence => true 
validates_format_of :email, :with => /\A[a-z0-9!#\$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\z/ 

यहाँ है कैसे मैं वर्तमान में ग्राहक के लिए json डेटा भेज रहा हूँ

@contacts = Contact.new(params[:contact]) 

if @contacts.save 
    render :json => { :error => 0, :success => 1 } 
else 
    render :json => { :error => 1, :success => 0 } 
end 

उत्तर

1

आप वास्तव में http स्थिति कोड का उपयोग करना चाहिए उपयोगकर्ता क्या, चल रहा है अवैध के लिए इतना बताने के लिए रिकॉर्ड

420 Invalid Record Record could not be saved 

और फिर अपने JSON रिटर्न में आपको एक त्रुटि संदेश भी हो सकता है जो उन्हें अधिक जानकारी देने के लिए आपके सक्रिय रिकॉर्ड/सक्रिय मॉडल त्रुटि संदेशों को वापस कर देगा।

+2

यह वास्तव में HTTP 422 होना चाहिए, क्योंकि 420 मानक का हिस्सा नहीं है (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#420) – awendt

15

सबसे आसान तरीका त्रुटियों का हैश भेजना होगा।

तो:

render :json => { :errors => @contacts.errors.as_json }, :status => 420 

ध्यान दें कि :status => 420 अपनी गलती कॉलबैक फोन jQuery के $ .ajax विधि तरह बातें करने के लिए आवश्यक है और आप 200 स्थिति (डिफ़ॉल्ट) वापस कभी नहीं करना चाहिए जब वहाँ एक त्रुटि है।

+3

यह वास्तव में HTTP 422 होना चाहिए, क्योंकि 420 का हिस्सा नहीं है मानक (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#420) – awendt

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