В руководствах направляющих это описано как это:
Объекты будут, кроме того, уничтожены, если они будут связаны с
:dependent => :destroy
, и удаленный, если они связаны с:dependent => :delete_all
Право, прохладное. Но каково различие между тем, чтобы быть уничтоженным и быть удаленным? Я попробовал обоих, и это, кажется, делает то же самое.
Разница в обратном вызове.
Обратный вызов :delete_all
делается непосредственно в вашем приложении и удаляет по SQL :
DELETE * FROM users where compagny_id = XXXX
При :destroy
происходит инстанцирование всех дочерних объектов. Поэтому, если вы не можете уничтожить его или если у каждого из них есть свой :dependent
, можно вызвать его обратные вызовы.
В ассоциации моделей Rails вы можете указать опцию :d ependent
, которая может принимать одну из следующих трех форм:
:d estroy/:d estroy_all
Связанные объекты уничтожаются вместе с этим объектом, вызывая их метод destroy
:d elete/:d elete_all
Все связанные объекты уничтожаются немедленно, не вызывая их : метод destroy
:nullify
Для всех внешних ключей связанных объектов задано значение NULL
без вызова обратных вызовов save