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

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

Gibt es etwas ähnlich wie das?

Vielen Dank im Voraus.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top