14 Stimmen

ActiveRecord-Validierungen ohne Speichern ausführen

Ich habe eine Sammlung von ActiveRecord-Objekten. Ich möchte in der Lage sein, alle Validierungen für jedes dieser Objekte durchzuführen, ohne sie 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. Gibt es eine Möglichkeit, dies zu tun? Oder übersehe ich vielleicht etwas über den Lebenszyklus der errors Sammlung?

35voto

Mike Trpcic Punkte 24627

Sie können folgendermaßen prüfen, ob ein Modell gültig ist:

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

Wenn Sie sehen wollen, wo die Fehler liegen, können Sie das tun:

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

Der Aufruf der ".valid?"-Methode führt Ihre Validierungen aus und legt alle Fehler in einem ActiveRecord::Errors-Objekt ab, auf das Sie wie im obigen Beispiel zugreifen können. Probieren Sie die Beispiele in der Konsole aus, um ein Gefühl dafür zu bekommen, wenn Sie möchten.

0 Stimmen

In ähnlicher Weise versuche ich, einen Veröffentlichungslink anzuzeigen, der darauf basiert, ob der Datensatz für die Veröffentlichung gültig ist oder nicht. In meinen Überprüfungen verwende ich das Format validates :if. Gibt es eine einfache Möglichkeit, das Attribut auf :true zu ändern und dann zu prüfen, ob es für die Veröffentlichung gültig ist? Z.B. post = Post.new(:title => "title", :published => false) post.published = true if post.valid? post.published = false

5voto

Andres Jaan Tack Punkte 21928

Die Durchführung der #valid? Methode für das Objekt führt alle Validierungen durch und füllt die errors Struktur.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X