2012-09-03 18 views
14

ile birlikte kimlik doğrulama için sorcery kullanıyorum.Varsayılan raylar nasıl değiştirilir "alan_with_errors"

Hata iletilerimi, kayıt formumda twitter'ın bootstrap stilinde DOM'a eklenen varsayılan <div class="field_with_errors"> raylarını değiştirerek biçimlendirmek istiyorum.

Böyle bir şey yapmak için raylar sözleşmesi nedir?

<div class="field_with_errors">'u yeniden adlandırmak için DOM'ı işleyen bir javascript ekleyebilirseniz, bu bir kesmek gibi görünüyor. Bu, raylarda bunu geçersiz kılmanın bir yolu olmalı gibi görünüyor, ama bunu nerede yapacağımı anlayamıyorum.

Bu önyükleme onun form hata tarzlarda inşa kullanmak için hata işaretlemek gerektirir nasıl: Yukarıdaki bağlantısından

<div class="control-group error"> 
    <label class="control-label" for="inputError">Input with error</label> 
    <div class="controls"> 
    <input type="text" id="inputError"> 
    <span class="help-inline">Please correct the error</span> 
    </div> 
</div> 
+0

Bunu
http aradığınız düşünüyorum : //stackoverflow.com/questions/5267998/rails-3-field-with-errors-wrapper-changes-the-page-appearance-how-to-avoid-t – Prem

+0

@prem: Teşekkürler! Kendimle bağlantı kurmak üzereydi. –

cevap

24

, içinde class Application < Rails::Application aşağıdaki koyarsanız config/application.rb

config.action_view.field_error_proc = Proc.new { |html_tag, instance| 
    "<div class=\"field_with_errors control-group error\">#{html_tag}</div>".html_safe 
} 

Doğrulama başarısız olduğunda giriş etiketleriniz çevrelerinizde kırmızı bir işaretleyici olacak

+4

Bu, etiketin girişin bir çizgiyi atlamasını sağlamak için form-yatayda neden olur, etrafta bir iş var mıdır? – Nayish

+0

Tek bir eylemin davranışını, ActionView :: Base.field_error_proc = Proc.new {| html_tag, instance | "

#{html_tag}
" .html_safe} 'belirli bir işlem yönteminin içinde. [Ref] (http://stackoverflow.com/a/11157784/664833) – user664833

1

Bootstrap 3.2 için sth kullanabilirsiniz. Böyle (sizin Gemfile için nokogiri taş eklemek):

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| 
    html = %(<div class="field_with_errors">#{html_tag}</div>).html_safe 
    # add nokogiri gem to Gemfile 

    form_fields = [ 
    'textarea', 
    'input', 
    'select' 
    ] 

    elements = Nokogiri::HTML::DocumentFragment.parse(html_tag).css "label, " + form_fields.join(', ') 

    elements.each do |e| 
    if e.node_name.eql? 'label' 
     html = %(<div class="control-group has-error">#{e}</div>).html_safe 
    elsif form_fields.include? e.node_name 
     if instance.error_message.kind_of?(Array) 
     html = %(<div class="control-group has-error">#{html_tag}<span class="help-block">&nbsp;#{instance.error_message.uniq.join(', ')}</span></div>).html_safe 
     else 
     html = %(<div class="control-group has-error">#{html_tag}<span class="help-block">&nbsp;#{instance.error_message}</span></div>).html_safe 
     end 
    end 
    end 
    html 
end 

Yeri Bu kod config/initializers/field_error_proc.rb dosyası (değil varsa bir tane oluşturmak)

Bu biraz kod değiştirilir iç: Overriding ActionView::Base.field_error_proc in Rails

0

Not eğer SimpleForm kullanıyorsunuz, Proc in application.rb kullanarak kabul edilen yanıtı işe yaramaz. Bunun yerine, simple_form başlatıcısını düzenlemelisiniz. Bootstrap 3.2 kullanılarak Örnek: Raylar 5 üzerinde

config.wrappers :default, class: :input, 
    hint_class: :field_with_hint, error_class: :'has-error' do |b| 
    [...] 
    b.use :hint, wrap_with: { tag: :span, class: :'text-warning' } 
    b.use :error, wrap_with: { tag: :span, class: :'text-danger' } 
end 
1

Heyecan Bootstrap 3.3.6, bu benim için bir başlatıcısı customize_error.rb gider ve çalışır:

ActionView::Base.field_error_proc = proc { |html_tag, _instance| "<div class=\"has-error\">#{html_tag}</div>".html_safe } 
İlgili konular