2013-03-26 6 views
5

Quindi ho un elemento di input come questo. L'elemento di avvolgimento riguarda, sai, una cosa visiva.Il campo "con errori" può essere collegato al genitore del tag di input che genera l'errore?

<div class="input-wrap"> 
    <input class="blah-blah" /> 
</div> 

Quando il <input> contiene l'errore, sarà come questo:

<div class="input-wrap"> 
    <div class="field-with-errors"> 
    <input class="blah-blah" /> 
    </div> 
</div> 

Ma quello che voglio fare è:

<div class="input-wrap field-with-errors"> 
    <input class="blah-blah" /> 
</div> 

ho trovato questa pagina, è molto vicino alla mia domanda

Rails 3: "field-with-errors" wrapper changes the page appearance. How to avoid this?

Ora so che posso buttare

config.action_view.field_error_proc = Proc.new { |html_tag, instance| 
    "#{html_tag}".html_safe 
} 

per evitare di fare un tag avvolgimento attorno al tag <input> che ha un errore. Ma quello che voglio davvero fare è, ancora una volta, aggiungere la classe "field-with-errors" al genitore diretto del tag <input>. Posso farlo? ActionView mantiene la struttura ad albero dei nodi DOM?

+0

Hai trovato una soluzione? Sembra (per un principiante come me) impossibile da raggiungere. Probabilmente è necessario un altro helper come wrapper – GorillaApe

+0

Ci sono alcune domande correlate nel menu laterale. Non sembra ancora una soluzione semplice per questo? Non so. http://stackoverflow.com/questions/5267998/rails-3-field-with-errors-wrapper-changes-the-page-appearance-how-to-avoid-t offre un buon suggerimento. Se non è possibile modificare il modello dalla funzione di supporto, magari aggiungendo un attributo dati e aggiungendo il nome della classe al genitore tramite JS? Sembra terribile ma potrebbe essere un modo per farlo ... – beatak

+0

Ciao @beatak, nonostante sia passato un po 'di tempo, hai visto [quel commento] (https://stackoverflow.com/questions/5267998/rails-3-field- con-errors-wrapper-changes-the-page-appearance-how-to-avoid-t/8380400 # 8380400) da quella SO? Sembra che sia riuscito a farlo manipolando a livello di stringa .. – SanjiBukai

risposta

-2

È possibile inserire il codice di gestione degli errori, ovunque ti piace, lo chiamano semplicemente come un blocco sulla variabile di istanza, ad esempio

if @instance.errors.any? 
    <div class="field with errors"> 
    @instance.errors.full_messages.each do |msg| 
    <p><%= msg %></p> 
    end 
end 

Se utente molto questo, è bene per tirarlo fuori in un helper e passa la variabile di istanza come parametro.

Problemi correlati