7

में त्रुटि सत्यापन संदेश आप पेपरक्लिप में एक सत्यापन संदेश,बदलें पेपरक्लिप

validates_attachment_presence, :image, :message => 'xxxx' 

कस्टम संदेश जैसे स्वचालित रूप से, क्षेत्र के नाम के साथ उपसर्ग आता है, भले ही यह साथ ओवरराइट कर दिया गया है सेट करते हैं: संदेश । आप संदेश को पूरी तरह से ओवरराइड कैसे करते हैं और इसे पूरी तरह से कस्टम बनाते हैं?

संपादित करें: टाइपो

उत्तर

7

असली समाधान नहीं है लेकिन आसान है पेपरक्लिप सत्यापन को छोड़ना और कस्टम लिखना।

validate :check_content_type 

    def check_content_type 
    if !['image/jpeg', 'image/gif','image/png'].include?(self.image_content_type) 
    errors.add_to_base("Image '#{self.image_file_name}' is not a valid image type") # or errors.add 
    end 
    end 

मुझे आशा है कि यह

0

मैं अगर यह अपने प्रश्न के अंदर सिर्फ एक टाइपो है पता नहीं है, लेकिन यह होना चाहिए:

validates_attachment_presence :image, :message => 'xxxx' 

और मैं का उपयोग नहीं होगा: संदेश एक कस्टम त्रुटि संदेश को जोड़ने के लिए , लेकिन इसे एक लोकल फ़ाइल के अंदर रखें।

+0

सिर्फ एक टाइपो मदद कर सकते हैं, यह चियर्स – Smickie

+0

अजीब संपादित। मैंने अभी इसका परीक्षण किया और मैं संदेश को ठीक देखता हूं। बात यह है कि त्रुटि 'image_file_name' में जोड़ दी जा रही है, इसलिए आप उस कॉलम पर एक साधारण रेल सत्यापन जोड़ सकते हैं (सुनिश्चित नहीं है कि यह काम करता है) और एक जोड़ें: उस पर संदेश जोड़ें।फिर भी, स्थानीय संदेशों के अंदर सभी संदेशों को बेहतर करना बेहतर है। और पेपरक्लिप का कौन सा संस्करण आप उपयोग कर रहे हैं? क्योंकि यह पुराने संस्करण में एक बग हो सकता है। – RobinBrouwer

+0

बस अपनी पोस्ट को दोबारा पढ़ें और मुझे लगता है कि मैंने इसे गलत व्याख्या की है। संदेश दिखाया जा रहा है, लेकिन संदेश में स्तंभ नाम भी दिखाया जा रहा है। मुझे लगता है कि यह एक 'error_messages_for' चीज है। मैं आमतौर पर 'error_message_for' का उपयोग नहीं करता (क्योंकि यह रेल 3 में नहीं है), इसलिए मैंने इसे अपने छोटे परीक्षण में नहीं देखा। यह नहीं पता कि इसे आपके लिए कैसे ठीक किया जाए। उसके लिए माफ़ करना। :( – RobinBrouwer

1

यह मानक रेल व्यवहार को दिखाने के लिए सत्यापन त्रुटियों से पहले विशेषता नाम शामिल है। आपके पास कुछ विकल्प इस व्यवहार के आसपास काम करने के लिए है:

  1. अपने त्रुटि संदेश विशेषता नाम prepended :)

  2. कोई दूसरा त्रुटि संदेश फ़ॉर्मेटर का उपयोग करने के लिए ठीक करें। एक @ object.errors के माध्यम से पुन: प्रयास करने के लिए अपने स्वयं के सहायक को लिखना और HTML टैग में संदेशों को लपेटना बहुत आसान है। मैं फ़ील्ड के पास ऑनलाइन त्रुटि संदेशों का उपयोग करना पसंद करता हूं ताकि हम हमेशा विशेषता नाम छोड़ दें।

  3. कस्टम मान्यता जो errors to base कहते हैं। यह आसान है, लेकिन गलत है, क्योंकि आप सुझाव दे रहे हैं कि किसी फ़ील्ड पर सत्यापन त्रुटि है। अभी भी आपकी समस्या का समाधान हो सकता है। उस विशेषता के लिए

  4. अवहेलना humanized_attribute_name इसे छिपाने के लिए। humanized_attribute_name शायद कहीं और उपयोग किया जाता है, इसलिए इससे अन्य समस्याएं हो सकती हैं।

HumanizedAttributesOverride = { 
    :image => "" 
} 

def self.human_attribute_name(attr) 
    HumanizedAttributesOverride[attr.to_sym] || super 
end 
+0

गुणों का नाम त्रुटियों के आधार पर त्रुटियों में जोड़ा जा रहा है, अलग-अलग फ़ील्ड नहीं, लेकिन फ़ील्ड का नाम बेस त्रुटियों के क्षेत्र में दिख रहा है। – Smickie

3

आप वास्तव में अपने मॉडल के बजाय इसे अपने दृश्य में करना चाहते हैं और यह वास्तव में काफी सीधे है। हम सिर्फ त्रुटियों लूप करने के लिए जा रहे हैं, और जब अपने लगाव के लिए एक ऊपर आता है हम फ़ील्ड नाम पर ध्यान नहीं देंगे:

<ul> 
    <% @myObject.errors.keys.each do |field| %> 
    <% @myObject.errors[field].each do |msg| %> 
     <% if field == :image_file_name %> 
     <li><%= msg %></li> 
     <% else %> 
     <li><%= field.to_s + " " + msg %></li> 
     <% end %> 
    <% end %> 
    <% end %> 
</ul> 

अपने मॉडल का नाम है कि केवल संदेश सेट प्रदर्शित करना चाहिए साथ @myObject की जगह आपके अनुलग्नक सत्यापन त्रुटियों के लिए। यह सिर्फ एक साधारण उदाहरण है जो उन्हें बाकी के साथ इनलाइन दिखाता है, लेकिन निश्चित रूप से आप संदेशों के साथ कुछ भी पसंद कर सकते हैं। उस फ़ील्ड का नाम रखना महत्वपूर्ण है जिसमें त्रुटि हो, यदि आप किसी भी तर्क को प्रोग्राम करना चाहते हैं जो कि विफलता के लिए विशिष्ट है, बिना किसी त्रुटि के त्रुटि संदेश पर भरोसा किए बिना।