2010-11-19 2 views
10

Es gibt einen validate Spezifizierer, die direkt über die Assoziation verwendet werden können (siehe 4.1.2.12 an diesem Rails Guide und auch ein validates_associated (siehe 3.2 in diesem Rails Guide). Wo beide unterscheiden sich?Validate vs validates_associated

+0

Hier ist ein [aktualisierter Link zum Eintrag Rails Guide auf validates_associated] (http://guides.rubyonrails.org/active_record_validations.html#validates-associated) – stereoscott

Antwort

2

Sie beide bestätigen das zugehörige Modell (s).

der Unterschied besteht darin, dass die erste ist eine Option, über die Assoziation (zB belongs_to, has_many, etc). Sie zB den ‚Akt der Validierung‘ in Ihrem Verband definieren.

In einem klassischen "Autor hat viele Bücher" -Beispiel sagen Sie belongs_to :author, :validate => true auf dem Buch-Modell aktivieren. Jedes Mal, wenn Sie ein Buchmodell validieren, muss der zugehörige Autor ebenfalls gültig sein.

Die andere ist eine separate Validierungsregel, die Sie zu Ihren anderen Validierungen hinzufügen können. In diesem Fall aktivieren Sie die Validierung eines zugeordneten Objekts zusammen mit anderen Validierungsregeln.

Dies kann umgekehrt funktionieren. In Autor: has_many :books ; validates_associated :books. Wenn Sie das Author-Objekt validieren, werden alle Bücher ebenfalls überprüft.

+1

Um validates_associated ohne doppelte Validierung zu verwenden, müssten Sie explizit ausschalten: auf der Assoziation validieren. Ich wundere mich immer noch, warum validates_associated existiert, wenn es das selbe tut wie der Standard. Irgendwelche Ideen? –

+3

Ich habe genau die gleiche Frage wie @zardox, aber ich bin mir nicht sicher, ob dies wirklich beantwortet. Können Sie erklären, was der tatsächliche Unterschied zwischen den beiden Methoden außer der Position ist, an der sie deklariert werden? Stellen Sie vor, dass das Buch in erster Linie einen Validierungs-Backpress bis zum Autor erstellt und den Autor dazu zwingt, ungültig zu sein, wenn das Buch ungültig ist? Dies scheint nicht sehr gekapselt zu sein. –

+1

Ich bin immer noch verwirrt. Was ist der Unterschied zwischen has_many: books,: validate => true und has_many: books; validates_associated: Bücher ?? (Ihre Beschreibung des Unterschieds lässt sie klingen, als wären sie gleich, was dem Gegenteil entspricht.) –