2011-03-31 11 views
12

मैं एक संपर्क जानकारी वर्ग इस तरह परिभाषित किया गया है में Mongoid त्रुटि संदेश:रेल/नेस्ट विशेषताओं

class ContactInfo 
    include Mongoid::Document 

    validates_presence_of :name, :message => ' cannot be blank' 

    field :name, :type => String 
    field :address, :type => String 
    field :city, :type => String 
    field :state, :type => String 
    field :zip, :type => String 
    field :country, :type => String 
    embedded_in :user 
end 

इस संपर्क जानकारी वर्ग मेरे उपयोगकर्ता वर्ग के भीतर एक नेस्टेड विशेषता के रूप में embedd है:

class PortalUser 
    include Mongoid::Document 
    accepts_nested_attributes_for :contact_info 
end 

जब मैं बिना किसी नाम के उपयोगकर्ता को सहेजने का प्रयास करता हूं, तो मुझे इस तरह एक त्रुटि संदेश मिलता है:

संपर्क जानकारी अमान्य है

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

धन्यवाद

+0

मोंगो में इस में निर्माण किया है, validates_associated साथ। Http://stackoverflow.com/questions/5078661/field-for-and-nested-form-with-mongoid –

+1

validates_associated केवल संबंधित मॉडल को मान्य करता है लेकिन यह अभी भी बेकार त्रुटि संदेश को थकाता है। – UrLicht

उत्तर

11

यहाँ समाधान मैं अंततः के साथ आया है:

उपयोगकर्ता वर्ग के लिए इन पंक्तियों जोड़ा

after_validation :handle_post_validation 
def handle_post_validation 
    if not self.errors[:contact_info].nil? 
    self.contact_info.errors.each{ |attr,msg| self.errors.add(attr, msg)} 
    self.errors.delete(:contact_info) 
    end 
end 
+0

मोंगो ने इसे 'validates_associated' के साथ बनाया है। Http://stackoverflow.com/questions/5078661/field-for-and-nested-form-with-mongoid –

+0

ध्यान दें कि यह कोड त्रुटियों की सरणी के अंत में नेस्टेड विशेषताओं को जोड़ देगा। – Nobu

-2

वहाँ नियंत्रक में एक समाधान हो सकता है ...

निर्माण कार्य में आप

जैसे कुछ जोड़ सकते हैं

यह contact_info निर्माण के लिए बाध्य करेगा, और सही क्षेत्र

पर एक त्रुटि ट्रिगर किया जाएगा तो आप इस शामिल नहीं करते हैं, contact_info नहीं

1

इसके बजाय लौटने user.errors.full_messages बनाने की बनाई गई है आपके उपयोगकर्ता मॉडल के लिए एक विशिष्ट त्रुटि संदेश विधि जहां आप अपनी सभी एम्बेडेड दस्तावेज़ त्रुटियों को संभालते हैं।

class PortalUser 
    include Mongoid::Document 
    accepts_nested_attributes_for :contact_info 
    def associated_errors 
    contact_info.errors.full_messages unless contact_infos.errors.empty? 
    end 
end 

और अपने नियंत्रक

flash[:error] = user.associated_errors 
संबंधित मुद्दे