2016-10-11 1 views
1

Ich bin ein Rails Noobie und ich versuche, die Unterschiede zwischen der Ablehnung einer Instanz basierend auf einem leeren Attribut und das Erstellen einer Validierung, die das Attribut prüft vorhanden ist, zu sortieren.Verschachtelte Attribute: Warum validieren Sie verschachtelte Modelle, wenn Sie reject_if verwenden?

Die Schüler haben viele Prüfungen. Ein kritisches Attribut einer Prüfung ist die Punktzahl. Ohne diese sollte die Prüfung nicht in die Datenbank aufgenommen werden.

Meine Prüfung Modell hat die folgende Zeile:

validates :score, presence: true 

Mein Schüler-Modell hat dies:

accepts_nested_attributes_for :exams, 
:reject_if => proc { |exam| exam['score'].blank? } 

Es scheint, dass das zweite Beispiel leise „verwirft“ die Prüfung aus in die Datenbank eingegeben werden , während das erste Beispiel eine Fehlermeldung ausspuckt und Sie auffordert, es erneut zu versuchen.

Aber wirklich, was ist der Unterschied hier .... es scheint, dass beide letztlich verhindern, dass eine Instanz in die Datenbank eingegeben wird - würde ich jemals von der Einbeziehung beider Linien profitieren?

Antwort

1

Aber wirklich, was ist der Unterschied hier ...

Der Unterschied ist absolut :) Sie isolieren die Logik, wo es hingehört.

Was Sie in Exam Modell betrifft betrifft nur Exam Modell.

Was Sie in Student Modell definieren, nun, betrifft nur Student Modell.

Dies gesagt, sagen Sie, Sie haben die reject_if in Student Modell übergeben und ermöglichen die Speicherung Transaktion voranzutreiben. Das verschachtelte Objekt wird nicht gespeichert, wenn es Validierungen in seinem Modell (Exam, das per Definition unabhängig ist) nicht besteht.

würde ich jemals von der Einbeziehung beider Linien profitieren?

Mit Validierungen in Exam Modell ermöglicht es Ihnen, ungültige Objekte in db zu vermeiden, zu speichern, und es hat nichts mit der Validierung verschachtelte Objekterstellung in Student Modell zu tun.

In jeder Hinsicht sind diese Dinge getrennt, anders und haben keine Verbindung.

Verwandte Themen