2011-03-18 4 views
6

द्वारा त्रुटियों वाले फ़ील्ड को लपेटता है सत्यापन के दौरान रेल को मेरे कोड को बदलने के लिए कैसे रोक सकता है।रेल

हर बार रेल

<div class='field_with_error'>...</div> 

के साथ अपने क्षेत्र लपेटता मैं fields_with_error वर्ग

.fields_with_error{ display: inline } 

जो काम करता है संपादित कर सकते हैं, लेकिन यह hacky

+0

क्या इस डब्ल्यू/ओ को पकड़ने से रोकने के लिए गंभीरता से कोई रास्ता नहीं है? – ohhh

उत्तर

7

इसके ठीक है। ऐसा करने के बजाय सीएसएस चीज का प्रयोग करें।

 
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag| 
    "<span class='field_error'>#{html_tag}</span>" 
end 

कौन सा मुझे लगता है :)

+0

यह अधिक हैकी, सच है :) लेकिन मुझे उम्मीद है कि एक आसान समाधान है, जैसे कि मेरे कोड – fl00r

+0

को बदलने के लिए रेल बंद करें जैसे रेल "आपके कोड को बदल रहे हैं"? यदि रेल इसे लपेट रहे हैं, तो आप रेल मददगार का उपयोग कर रहे हैं। यदि आप इसे नहीं चाहते हैं, तो उन सहायकों का उपयोग न करें, या अपना खुद का फॉर्म बिल्डर हेल्पर्स लिखें। – DGM

+0

मैं उनका उपयोग नहीं करता हूं। केवल एक चीज जो मैं उपयोग करता हूं वह '@ object.errors' को कॉल कर रहा है ... – fl00r

5

मैं environment.rb में इस का उपयोग अधिक hacky है। और भी हैकी ;-)

# 
# Fix annoying <div class="fieldsWithError"> wrapping after validation 
# http://dev.rubyonrails.org/ticket/3587 
# 

ActionView::Base.field_error_proc = Proc.new { |html_tag, instance| 
    msg = instance.error_message 

    if html_tag =~ /<(input|textarea|select)[>]+class=/ 
    class_attribute = html_tag =~ /class=['"]/ 
    html_tag.insert(class_attribute + 7, "error ") 
    elsif html_tag =~ /<(input|textarea|select)/ 
    first_whitespace = html_tag =~ /\s/ 
    html_tag[first_whitespace] = " class='error' " 
    end 

    html_tag 
} 
-1

आप इसे करने के लिए jQuery का भी उपयोग कर सकते हैं। अभी भी एक हैक की तरह लग रहा है लेकिन यह काम कर रहा है।

$('.field_with_errors input').unwrap(); 
+0

दरअसल, यह बहुत ही असाधारण मामलों में मदद कर सकता है। धन्यवाद! – pierrea

+0

यदि आपके पास ऐसे उपयोगकर्ता हैं जो जेएस नहीं चला रहे हैं तो उनके पास अलग-अलग व्यवहार होंगे। इसके लिए जेएस का उपयोग करना अधिक है। –