2009-06-16 6 views
3

Gibt es ein Modell, das Validierungen in der Datei model_name.rb aufweist, wie kann ich manuell auf diese Validierungen zugreifen? Ich würde gern ein eigenes Formularvalidierungssystem zusammenbauen, das neben den integrierten Rails-Tricks funktioniert und ich möchte alles so trocken wie möglich halten. Mein Hauptproblem ist, dass ich serverseitige Validierungen machen muss, bevor irgendwelche der Formularwerte die Datenbank treffen (ich benutze ein mehrstufiges Formular).Erhalten Sie Validierungen eines Rails-Modells

Im Grunde frage ich mich, wenn es eine Methode, wie

User.validations.each do |v| 
    puts v.constraint.to_s + " " + v.message 
end 

dazu Gibt es etwas ähnlich ist?

Vielen Dank im Voraus.

Antwort

1

Mein Hauptproblem ist, dass ich serverseitige Validierungen vor einem die Formularwerte drücken Sie die Datenbank vornehmen müssen (ich bin ein mehrstufiges Formular).

Wenn Ihr Modell gemäß den Validierungen in seiner Klasse Datei nicht gültig ist, dann wird seine Daten nicht in der Datenbank gespeichert erhalten (es sei denn, Sie false zum save Methode übergeben Validierungen zu unterdrücken).

  • können Sie ein Modell fragen, ob es seine durch den Aufruf an jedem Punkt gültig ist valid?/invalid? Methoden.
+0

Mein Formular hat ungefähr 4 Schritte. Keine Modelle rufen die .save-Methode bis zum dritten Schritt auf. Allerdings muss ich noch einige grundlegende Validierungen durchführen (dh dem Benutzer werden mehrere Checkbox-Elemente zur Auswahl angezeigt. Ich muss einen Fehler ausgeben, wenn keine Boxen ausgewählt sind, usw.) Werden die Validierungen immer noch ohne Aufruf von save aufgerufen? – user94154

+0

Siehe meine Bearbeitung oben über die gültige?/Ungültig? Methoden. –

0

Das ActiveRecord-Objekt macht die Fehlermethode nach der Gültigkeit verfügbar? wird aufgerufen, die Ihnen Meldungen gibt, welche Validierungen verletzt werden. Sie könnten prüfen, ob es gültig ist? und überprüfen Sie dann, ob eines der Felder auf dem Teil des Formulars ungültig ist, auf dem Sie sich befinden. Sie könnten so etwas für ein Formular mit den Feldern field1 und field2 tun.

0

Ihre beste Wette ist, eine Zustandsmaschine zu verwenden und die Daten in der Datenbank zwischen den verschiedenen Schritten im Formular zu speichern.

Sie können z.B. validates_presence_of :username, :if => proc {|u| u.signup_step >= 2 }, wobei signup_step eine Integerspalte in der Datenbank ist.

Also, obwohl Sie sagen, dass Sie es nicht in der Datenbank zwischen den Formularen speichern möchten, denke ich, dass Sie sollten. Wenn Sie dies tun, können Sie regelmäßige Validierungen und Modelle ohne böse Hacks verwenden. Und ehrlich gesagt, bezweifle ich, dass es so ein Problem ist.

+0

sehr raffiniert! Ich denke, ich werde dies eine Chance geben ... und ich bereits in der db mit Sitzungen speichern ... Ich denke, ich hätte klarer sein sollen - ich es nicht in der db als ActiveRecord Objekt speichern, bis a bestimmter Schritt. Danke! – user94154