2009-07-31 13 views
10

Ich habe eine Sammlung von ActiveRecord-Objekten. Ich möchte in der Lage sein, alle Validierungen für jedes dieser Objekte auszuführen, ohne sie tatsächlich in der Datenbank zu speichern. Ich möchte nur wissen, ob sie gültig wären, wenn ich sie in der Datenbank speichern würde. Mit anderen Worten, ich möchte im Wesentlichen die errors Datenstruktur für jedes meiner Objekte bevölkern. Gibt es eine Möglichkeit, dies zu tun? Oder vielleicht fehlt mir etwas über den Lebenszyklus der errors Kollektion?Ausführen von ActiveRecord-Validierungen ohne Speichern

Antwort

23

Sie können Folgendes überprüfen tun, wenn ein Modell gültig ist:

@user = User.new 
if @user.valid? 
    #do things 

Wenn Sie sehen wollen, was die Fehler sind, können Sie tun:

@user = User.new 
unless @user.valid? 
    @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"} 

der Aufruf ".gültig?" Die Methode führt Ihre Validierungen aus und fügt alle Ihre Fehler in ein ActiveRecord :: Errors-Objekt ein, auf das wie im obigen Beispiel zugegriffen werden kann. Geben Sie den Beispielen einen Versuch in der Konsole, um ein Gefühl dafür zu bekommen, wenn Sie möchten.

+0

Entlang der ähnlichen Zeilen, ich versuche, eine Veröffentlichung Link basierend auf dem Datensatz ist gültig für die Veröffentlichung oder nicht anzuzeigen. In meinen Validierungen verwende ich validates: wenn format. Gibt es eine einfache Möglichkeit, das Attribut zu ändern, um "True" zu sagen und dann zu überprüfen, ob es für die Veröffentlichung gültig ist? Für z.B. post = Post.new (: titel => "titel",: veröffentlicht => falsch) post.published = true wenn post.valid? post.published = false – chetu

2

Durch Ausführen der #valid?-Methode für das Objekt werden alle Validierungen ausgeführt und die Struktur errors ausgefüllt.

dude = Person.new 
unless dude.valid? 
    # Examine errors 
end 
Verwandte Themen