Проверять vs validates_associated

Существует спецификатор validate, который может быть непосредственно использован в ассоциации (см. 4.1.2.12 в этом Rails Guide, а также validates_associated (см. 3.2 в этом Rails Guide). Где они отличаются друг от друга?

Ответ 1

Они оба проверяют связанную модель (ы).

Разница в том, что первая является опцией в ассоциации (например, belongs_to, has_many и т.д.). Например. вы определяете "акт проверки" в своей ассоциации.

В классическом примере "Автор имеет много книг", скажем, вы включили belongs_to :author, :validate => true в модель книги. Каждый раз, когда вы проверяете модель книги, соответствующий автор также должен быть действительным.

Другое - это отдельное правило проверки, которое вы можете добавить к другим проверкам. Таким образом, в этом случае вы включаете проверку связанного объекта вместе с другими правилами проверки.

Это может работать наоборот. В Автор: has_many :books ; validates_associated :books. Когда вы проверяете объект Author, все книги также проверяются.