2012-08-31 14 views
7

आप उन फ़ील्ड के लिए फॉर्म फ़ील्ड हाइलाइटिंग कैसे प्रदर्शित करते हैं जो रेल 3.1 में सत्यापन त्रुटियों को विफल करते हैं? मुझे पता है कि मचान स्वचालित रूप से इसे संभालने के लिए सीएसएस और नियंत्रक कोड उत्पन्न करता है, लेकिन मैं सोच रहा था कि मैन्युअल रूप से उत्पन्न करने का कोई तरीका है या नहीं। मैंने पहले से ही त्रुटि संदेशों के स्ट्रिंग डिस्प्ले को पहले से ही कार्यान्वित कर दिया है: @ user.errors.full_messages.each ... आदि, लेकिन मैं फ़ील्ड को लाल रंग में हाइलाइट नहीं कर सकता। कोई विचार?रेल सत्यापन फ़ील्ड पर फ़ील्ड को हाइलाइट करने के लिए कैसे करें

धन्यवाद।

उत्तर

19

मान लिया जाये कि आप अपने सीएसएस फ़ाइल में क्षेत्रों के लिए एक त्रुटि वर्ग है:

<% if @user.errors[:name] %> 
    <%= f.label :name, :class => "error" %> 
<% else %> 
    <%= f.label :name %> 
<% end %> 

आप यही चाहते है?

अतिरिक्त: here's a section about customizing default ActiveRecord validations CSS.

संपादित करें:(के बारे में अतिरिक्त आईएफएस)

# app/helpers/application_helper.rb 

def field_class(resource, field_name) 
    if resource.errors[field_name] 
    return "error".html_safe 
    else 
    return "".html_safe 
    end 
end 

और फिर:

# in your view 

<%= f.label :name, :class => field_class(@user, :name) %> 
<%= f.label :password, :class => field_class(@user, :password) %> 
[...] 

(मैं में एक गलती करते हैं हो सकता है वहाँ - मैं writi हूँ एक फोन पर एनजी - लेकिन आपको सामान्य विचार मिलता है। आप इसे कई तरीकों से कोड कर सकते हैं = अनंतता, तो इसे जिस तरह से आप पसंद करते हैं ...)

+0

धन्यवाद। यह काम करता है, लेकिन इसका मतलब यह होगा कि मुझे प्रत्येक फॉर्म फ़ील्ड के लिए एक करना होगा ... – kdhuang

+0

संपादित देखें। मैं शर्त लगाता हूं कि अगर आप चाहें तो इनलाइन को भी कोड कर सकते हैं। या आप 'लेबल' को भी ओवरराइड कर सकते हैं और कभी भी कोई अतिरिक्त वर्ण लिखना नहीं है। –

+0

धन्यवाद naliwajek! – kdhuang

0

मुझे यह काम करने के लिए (resource.errors [field_name] .length> 0) करना था:

डीईएफ़ field_class (संसाधन, FIELD_NAME) resource.errors [FIELD_NAME] .length> 0 वापसी "custom_error1" .html_safe बाकी वापसी "" .html_safe अंत अंत

+1

या आप 'वर्तमान' विधि का उपयोग कर सकते हैं: 'if resource.errors [field_name] .present?' – rapcal

2

रेल अब एक हो, तो अच्छी आस्तीन अपनी आस्तीन .. जब एक error रेल लगता हैत्रुटि फ़ील्ड के आस-पास .field_with_errors कक्षा के साथ। तो अब आप उस वर्ग को लक्षित कर सकते हैं और स्टाइल जोड़ सकते हैं।

इनपुट पर ध्यान केंद्रित करने के लिए आप

.field_with_errors input{ 
    border: 1px solid red !important; 
} 

जबकि important! किसी भी मौजूदा शैलियों के ऊपर लिख देगा इस सीएसएस input तत्व के चारों ओर एक अच्छा लाल रेखा रखा जाएगा कर सकते हैं।

+0

कमाल! यह इतना आसान है! बहुत बहुत धन्यवाद –

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