9

Ich habe ein Flight Modell in einem FlightLog Modell geschachtelt. A FlightLog kann viele Flüge enthalten.Anzeigen von Feldern mit Fehlern für verschachtelte Formulare in Rails 3.2 + SimpleForm

Ich verwende SimpleForm mit der Bootstrap-Installation, die es ermöglicht, Formularelemente mit Fehlern mit der Fehlerklasse zu umgeben, wenn eine Validierung fehlschlägt.

Das Problem ist, dass, obwohl Validierungen für das verschachtelte Modell ausgelöst werden, die Felder mit Fehlern innerhalb des simple_fields_for nicht markiert werden, so ist es nicht möglich, zu bestimmen, welches Attribut nicht gültig ist.

Nachdem ich den Fehler-Hash beim Aufruf der create-Aktion untersucht habe, kann ich sehen, dass er korrekt mit den Fehlern auf der obersten Ebene und den Fehlern der verschachtelten Ressourcen in jeder Ressource gefüllt ist.

Wie kann ich das Verhalten von simple_form ändern, um die Fehlerklasse zur Kontrollgruppe jedes verschachtelten Modells hinzuzufügen, um dem Verhalten des übergeordneten Elements zu entsprechen?

Vielen Dank im Voraus.

enter image description here

Antwort

2

Ich habe benutzerdefinierte benutze Accessoren anstelle der _id-Felder, weshalb sie nicht benachrichtigt wurden, wenn sie Fehler hatten. Ich habe schließlich beschlossen, f.error: attr_name unter jedem Accessor zu verwenden und das Styling manuell mit JS

20

Wenn Sie simple_form mit Bootstrap verwenden, funktioniert das - man muss nur richtig ein paar Punkte ein:

1 - Verwenden Sie die simple_form Bootstrap-Wrapper (von simple_form 2.0) - Sie finden Sie sie in der Github Repo unter config/initializers/simple_form.rb (https://github.com/rafaelfranca/simple_form-bootstrap)

2 - für verschachtelte Formulare, um die Fehler anzuzeigen, müssen Sie sicherstellen, dass Sie ein Objekt bereitstellen. f.simple_fields_for :nested_model wird nicht funktionieren, müssen Sie f.simple_fields_for parent_model.nested_model oder f.simple_fields_for :nested_model, parent_model.nested_model verwenden, damit das Formular das erforderliche Objekt erhalten kann.

Wenn Sie noch nicht alles bekommen, stellen Sie sicher, dass das Formular wirklich immer das Objekt, das Sie denken, es ist, mit Fehlern, durch die Fehler Daten auf verschachteltes Objekt ausgibt: parent_model.nested_model.errors.full_messages.to_sentence

+0

zu ändern Danke für die Vorschläge, ich werde es versuchen und lassen Sie wissen, wie es geht! – bruno077

+0

'parent_model.nested_model.errors.full_messages.to_sentence' funktioniert bei mir nicht, aber 'parent_model.errors.full_messages.to_sentence' funktioniert und zeigt Fehler vom verschachtelten Modell an. Vielen Dank! –

+0

das war ein großer Zeitretter Ich kann dir nicht genug danken –