Holen Sie Validierungen eines Rails-Modell
-
05-07-2019 - |
Frage
Bei einem Modell, das Validierungen in der model_name.rb Datei hat, wie kann ich diese Validierungen Zugriff manuell? Ich mag mein eigenes Form Validierungssystem kochen, die neben den eingebauten in Rails Tricks funktionieren würden und ich möchte alles so trocken wie möglich zu halten. Mein Hauptproblem ist, dass ich serverseitige Validierungen zu machen, bevor einer der Formularwerte die Datenbank getroffen (Ich bin ein mehrstufiges Formular).
Im Grunde frage ich mich, ob es eine Methode wie
istUser.validations.each do |v|
puts v.constraint.to_s + " " + v.message
end
Gibt es etwas ähnlich wie das?
Vielen Dank im Voraus.
Lösung
Mein Hauptproblem ist, dass ich machen serverseitige Validierungen vor allen die Formularwerte drücken Sie die Datenbank (ich bin unter Verwendung einer mehrstufigen Form).
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).
- Sie können ein Modell fragen, ob es an irgendeiner Stelle gültig ist durch seine
valid?
/invalid?
Methoden aufrufen.
Andere Tipps
Das Active Objekt stellt die Fehler-Methode nach gültig? genannt wird, was gibt Ihnen Nachrichten über die Validierungen verletzt werden. Sie könnten gültig überprüfen? und überprüft, um dann festzustellen, ob eines der Felder auf dem Teil des Formulars Sie sind ungültig. Sie so etwas wie dies für ein Formular mit Feldern field1 und field2 tun könnte.
unless x.valid?
[:field1,:field2].each do |field|
yes_there_was_an_error if x.errors[field]
end
end
Ihre beste Wette ist eine Zustandsmaschine zu verwenden, und speichern Sie die Daten in der Datenbank zwischen den verschiedenen Schritten in Form.
können Sie tun, zum Beispiel validates_presence_of :username, :if => proc {|u| u.signup_step >= 2 }
, wo signup_step
eine ganze Zahl Spalte in der Datenbank.
Also, auch wenn Sie sagen, dass Sie nicht in der Datenbank zwischen den Formularen gespeichert werden sollen, ich glaube, Sie sollten. Wenn Sie dies tun, können Sie regelmäßige Validierungen und Modelle, ohne böse Hacks verwenden. Und ehrlich gesagt, ich bezweifle, tun es auf diese Weise ist ein Problem.