2012-10-10 18 views

Odpowiedz

58

myślę, że lepiej jest użyć zniszczyć zamiast kasowania:

Manager.where(:manager_level => 5).destroy_all 
+5

Zdecydowanie ważne, ale pamiętaj: "Niszczy warunki dopasowania rekordów, tworząc instancję każdego rekordu i wywołując jego metodę niszczenia." (http://apidock.com/rails/ActiveRecord/Relation/destroy_all) Może to być bardzo powolne w przypadku dużych zestawów wyników. –

+0

Tak, myślałem o tym, żeby zachować spójność modeli i takie tam. – MurifoX

+4

@MurifoX - Czy możesz wyjaśnić, dlaczego uważasz, że niszczenie jest lepsze niż usuwanie? Niekoniecznie się z tym nie zgadzam, ale pomoże to w uzyskaniu pełniejszej odpowiedzi. –

12

To powinno działać:

Manager.where(:manager_level => 5).delete_all 

Uwaga: To nie usunie rekordy utrzymaniu.

23

Spróbuj tego:

Manager.delete_all(manager_level: 5) 
+0

1. muszę użyć zmiennej aby określić co usunąć. 2. Tabela nie ma indeksu, jest tabelą łączników między 2 innymi tabelami. –

+0

Nie działa dla mnie. Wystąpił błąd z powodu integralności referencyjnej. –

+0

powinno to być zaakceptowaną odpowiedzią, ponieważ inne zapytania próbują WYBRAĆ przed USUWANIEM - prowadząc do problemów z wydajnością na dużych zbiorach danych. – toobulkeh

Powiązane problemy