Направляющие: зависимый =>: уничтожьте VS: зависимый =>: delete_all

В руководствах направляющих это описано как это:

Объекты будут, кроме того, уничтожены, если они будут связаны с :dependent => :destroy, и удаленный, если они связаны с :dependent => :delete_all

Право, прохладное. Но каково различие между тем, чтобы быть уничтоженным и быть удаленным? Я попробовал обоих, и это, кажется, делает то же самое.

187
задан meagar 15 December 2011 в 08:16
поделиться

2 ответа

Разница в обратном вызове.

Обратный вызов :delete_all делается непосредственно в вашем приложении и удаляет по SQL :

DELETE * FROM users where compagny_id = XXXX

При :destroy происходит инстанцирование всех дочерних объектов. Поэтому, если вы не можете уничтожить его или если у каждого из них есть свой :dependent, можно вызвать его обратные вызовы.

196
ответ дан 23 November 2019 в 05:46
поделиться

В ассоциации моделей Rails вы можете указать опцию :d ependent, которая может принимать одну из следующих трех форм:

  • :d estroy/:d estroy_all Связанные объекты уничтожаются вместе с этим объектом, вызывая их метод destroy
  • :d elete/:d elete_all Все связанные объекты уничтожаются немедленно, не вызывая их : метод destroy
  • :nullify Для всех внешних ключей связанных объектов задано значение NULL без вызова обратных вызовов save
131
ответ дан 23 November 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: