2010-11-19 12 views
10

C'è un validate identificatore che può essere utilizzato direttamente in merito all'associazione (vedi 4.1.2.12 a questo Rails Guide e anche un validates_associated (vedi 3.2 a quel Rails Guide). Dove fare entrambe le cose differiscono?validate vs validates_associated

+0

Ecco un [collegamento aggiornato alla voce Rails Guide su validates_associated] (http://guides.rubyonrails.org/active_record_validations.html#validates-associated) – stereoscott

risposta

2

Essi sia validare il modello associato (s).

la differenza è che il primo è un'opzione relativa all 'associazione (ad esempio belongs_to, has_many, ecc). Ad esempio, si definisce la 'atto di convalida' nella vostra associazione.

In un classico esempio di "Autore ha molti libri", supponi di abilitare lo belongs_to :author, :validate => true nel modello Book. Ogni volta che convalidi un modello di libro, anche l'autore associato deve essere valido.

L'altra è una regola di convalida separata che è possibile aggiungere alle altre convalide. Quindi, in questo caso abiliti la convalida di un oggetto associato insieme ad altre regole di validazione.

Questo può funzionare in senso inverso. In Autore: has_many :books ; validates_associated :books. Quando si convalida l'oggetto Autore, anche tutti i libri vengono convalidati.

+1

Per utilizzare validates_associated senza convalida doppia, è necessario spegnere esplicitamente: convalidare sull'associazione. Mi sto ancora chiedendo perché esiste validates_associated se fa la stessa cosa del default. Qualche idea? –

+3

Ho esattamente la stessa domanda di @zardox ma non sono sicuro che questo lo risponda davvero. Potresti spiegare qual è la differenza effettiva tra i due metodi diversi dalla posizione in cui sono dichiarati. Stai suggerendo che, in prima istanza, il libro crea effettivamente una contropressione di validazione fino all'autore e costringe l'autore a non essere valido se il libro non è valido? Questo non sembra molto incapsulato. –

+1

Sono ancora confuso, anche. Qual è la differenza tra has_many: books,: validate => true e has_many: books; validates_associated: books ?? (La tua descrizione della differenza li fa sembrare uguali, il che è l'opposto della spiegazione di come sono diversi.) –