2013-03-26 4 views
5

So habe ich ein Eingabeelement wie folgt. Das Umhüllungselement ist, weißt du, eine visuelle Sache.Kann "Feld mit Fehlern" an das übergeordnete Element des Eingabe-Tags angehängt werden, das den Fehler verursacht?

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

Wenn der <input> den Fehler enthält, es so sein werde:

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

Aber was ich will zu tun ist:

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

ich diese Seite gefunden, dann ist es sehr nah an meiner Frage

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

Jetzt

Ich weiß, ich werfen kann

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

zu vermeiden, dass ein Wickel Tag machen um die <input> Tag, das auf einen Fehler aufweist. Aber was ich wirklich tun möchte, ist wieder hinzufügen "Feld-mit-Fehler" -Klasse auf dem direkten Elternteil der <input>-Tag. Kann ich das machen? Behält ActionView die Baumstruktur von DOM Nodes?

+0

Haben Sie eine Lösung gefunden? Es scheint (für einen Anfänger wie mich) unmöglich zu erreichen. Wahrscheinlich ist ein weiterer Helfer als Wrapper erforderlich – GorillaApe

+0

Es gibt einige verwandte Fragen im Seitenmenü. Es scheint keine einfache Lösung dafür zu geben? Ich weiß nicht. http://stackoverflow.com/questions/5267998/rails-3-field-with-errors-wrapper-changes-the-page-appearance-how-to-avoid-t bietet einen guten Hinweis. Wenn Sie die Vorlage nicht von der Hilfsfunktion aus ändern können, fügen Sie möglicherweise ein Datenattribut hinzu und fügen Sie den Klassennamen dem übergeordneten Element durch JS hinzu? Es klingt schrecklich, aber es könnte eine Möglichkeit sein, es zu tun ... – beatak

+0

Hallo @ beatak, trotz es war eine Weile, hast du [diesen Kommentar] gesehen (https://stackoverflow.com/questions/5267998/rails-3-field- with-errors-wrapper-changes-die-Seite-aussehen-how-to-avoid-t/8380400 # 8380400) von diesem SO? Es scheint, dass er es tatsächlich geschafft hat, indem er auf der String-Ebene manipuliert hat. – SanjiBukai

Antwort

-2

Sie können den Code setzen für die Fehlerbehandlung, wo immer Sie wollen, nennen es einfach als ein Block auf der Instanzvariable, zum Beispiel

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

Wenn Sie Benutzer dies viel, ist es gut, ihn herauszuziehen in ein Helfer und übergeben Sie die Instanzvariable als Parameter.

Verwandte Themen