See zniszczyć usuwa związane z nim elementy gdzie delete_all możesz usuwać wiele danych z tabeli siebie jak DELETE * FROM table where field = 'xyz'
: w zależności od opcji:
Kontrole co dzieje się z powiązane obiekty, gdy ich właściciel zostanie zniszczony. Zauważ, że są one implementowane jako wywołania zwrotne, a Railsy wykonują wywołania zwrotne w kolejności. Dlatego inne podobne wywołania zwrotne mogą wpływać na: zależne zachowanie, a zachowanie :dependent
może wpływać na inne wywołania zwrotne.
:destroy
powoduje również zniszczenie wszystkich powiązanych obiektów.
:delete_all
powoduje, że wszystkie powiązane obiekty są usuwane bezpośrednio z bazy danych (więc wywołania zwrotne nie zostaną wykonane).
:nullify
powoduje, że klucze obce mają wartość NULL. Połączenia zwrotne nie są wykonywane.
:restrict_with_exception
powoduje, że wyjątek zostanie podniesiony, jeśli istnieją powiązane rekordy.
:restrict_with_error
powoduje, że właściciel otrzymuje błąd, jeśli istnieją powiązane z nim obiekty.
W przypadku używania z opcją :through
powiązanie w modelu łączenia musi być wartością belongs_to, a rekordy, które zostaną usunięte, są rekordami łączenia, a nie powiązanymi rekordami.
Tworzenie i wywoływanie zniszczeń na każdym z obiektów podrzędnych będzie powolne, jeśli masz dużo dzieci (i n^2, jeśli masz wnuki i tak dalej). delete_all jest rodzajem rozwiązania typu "nuke it from orbit", w którym nie interesują cię/nie mają żadnych callbacków before/after destroy na modelach. –
Zobacz nowszą odpowiedź poniżej! – berezovskyi
"Nuke it from orbit" sprawił, że mój dzień – Andreas