2013-10-30 6 views
9

रेल सक्रियणकॉर्ड प्रमाणीकरण में, सामान्य रूप से यदि कोई सत्यापन विफल रहता है, तो यह मॉडलों की त्रुटियों की विशेषता में एक त्रुटि संदेश जोड़ देगा, हालांकि हमारे क्लाइंट त्रुटि संदेश के अतिरिक्त एक त्रुटि कोड लौटाएंगे, उदाहरण के लिए, हमारे पास एक बिल मॉडल है, यदि msisdn विशेषता है, तो msisdn विशेषता है, त्रुटि कोड 101 है, यदि msisdn MSISDN प्रारूप के साथ शिकायत नहीं करता है, तो त्रुटि कोड 102 है, जब क्लाइंट रीस्ट इंटरफ़ेस के माध्यम से अनुरोध सबमिट करता है, और यदि सत्यापन विफल हो जाता है, हम जैसेरेल सक्रिय रिकॉर्ड सत्यापन में त्रुटि संदेश के अलावा त्रुटि कोड वापस करने का कोई तरीका है?

bill: { 
    error_code: 101, 
    error_message: "msisdn can't be null" 
} 

एक json ऑब्जेक्ट प्रदान वहाँ एक रास्ता त्रुटि संदेशों पर के अलावा एक त्रुटि कोड उत्पन्न करने के लिए ActiveRecord बताने के लिए है? बहुत बहुत धन्यवाद।

उत्तर

4

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

उदाहरण के लिए, त्रुटि कोड

class Foo < ActiveRecord::Base 
    attr_accessible :msiisnd 
    validate :msiisdn_can_not_be_blank 

    def msiisdn_can_not_be_blank 
    if msiisdn.blank? 
     errors.add(:msiisdn, {code: 101, message: "cannot be blank"}) 
    end 
    end 
end 

जोड़ने के लिए एक कस्टम सत्यापनकर्ता का उपयोग तो यह

foo = Foo.new 
foo.errors.count 
#=> 0 
foo.valid? 
#=> false 
foo.errors.count 
#=> 1 
foo.errors[:msiisdn] 
#=> [{ code: 101, message: "can not be blank"}] 
foo.errors[:msiisdn][0][:code] 
#=> 101 

तो आप इसका इस्तेमाल कर सकते हैं का उपयोग करें। लेकिन जब आपको त्रुटियों को सही तरीके से दिखाने की आवश्यकता होती है, तो आपको अधिक काम करने की आवश्यकता होती है, क्योंकि एक रूप में त्रुटियों को प्रदर्शित करना, क्योंकि यह एक सम्मेलन नहीं है।

+0

पहली बात जो दिमाग में आती है वह है 'full_messages' तोड़ने जा रहा है – fatuhoku

6

रेल 5 में foo.errors.details के साथ एक समान सुविधा शामिल होगी। आप बेहतर एपीआई त्रुटियों को बनाने के लिए आसानी से इसका उपयोग कर सकते हैं।

class Person < ActiveRecord::Base 
validates :name, presence: true 
end 

person = Person.new 
person.valid? 
person.errors.details 
# => {name: [{error: :blank}]} 

आप संख्या के रूप में कोड त्रुटियों को पसंद करते हैं, तो आप आसानी संख्या त्रुटि कुंजी के साथ मिलान कर सकते हैं।

रेल के लिए 3 & 4 आप इस मणि का उपयोग कर सकते हैं https://github.com/cowbell/active_model-errors_details चुड़ैल एक ही सुविधा है जो बैकपोर्टेड है।

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