2010-11-19 9 views
10

Jest validate specyfikator, które można bezpośrednio stosować w połączeniu (patrz 4.1.2.12 w tym Rails Guide a także validates_associated (patrz 3.2 w tym Rails Guide). Gdzie zarówno różnią?Weryfikuj vs validates_associated

+0

Oto [zaktualizowany link do wpisu Przewodnika Railsowego w skojarzeniu validates] (http://guides.rubyonrails.org/active_record_validations.html#validates-associated) – stereoscott

Odpowiedz

2

Są zarówno zatwierdzenie powiązanych modelu (-y).

różnica polega na tym, że pierwszy jest opcją w sprawie stowarzyszenia (np belongs_to, has_many, etc). np można zdefiniować „akt walidacji” w swoim związku.

W klasycznym przykładzie "Autor ma wiele książek" powiedzmy, że włączasz belongs_to :author, :validate => true w modelu Book. Za każdym razem, gdy sprawdzasz poprawność modelu Book, powiązany autor musi również być ważny.

Druga to osobna zasada sprawdzania poprawności, którą można dodać do innych poprawności. Tak więc w tym przypadku włącza się sprawdzanie poprawności skojarzonego obiektu z innymi regułami sprawdzania poprawności.

Może to działać odwrotnie. W Autor: has_many :books ; validates_associated :books. Podczas sprawdzania poprawności obiektu autorskiego wszystkie książki są również zatwierdzane.

+1

Aby użyć validates_associated bez podwójnego sprawdzania poprawności, musisz jawnie wyłącz: sprawdź na skojarzeniu. Nadal się zastanawiam, dlaczego validates_associated istnieje, jeśli robi to samo, co ustawienie domyślne. Jakieś pomysły? –

+3

Mam dokładnie to samo pytanie co @zardox, ale nie jestem pewien, czy to naprawdę odpowiada. Czy mógłbyś wyjaśnić, jaka jest rzeczywista różnica między dwiema metodami innymi niż pozycja, w której są zadeklarowane. Sugerujesz, że w pierwszej kolejności książka faktycznie tworzy przeciwciśnienie walidacyjne aż do autora i zmusza autora do unieważnienia, jeśli książka jest nieważna? To nie wydaje się bardzo zamknięte. –

+1

Ciągle jestem zdezorientowany. Jaka jest różnica między has_many: books,: validate => true i has_many: books; validates_associated: books ?? (Twój opis różnicy sprawia, że ​​brzmią tak, jakby były takie same, co jest przeciwieństwem wyjaśnienia, jak się one różnią.) –

Powiązane problemy