2012-10-10 25 views

risposta

58

penso che sia meglio utilizzare distruggere anziché eliminare:

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

Definitivamente valido, ma tenere a mente: "Distrugge i record che corrispondono alle condizioni istanziando ogni record e chiamando il suo metodo destroy". (http://apidock.com/rails/ActiveRecord/Relation/destroy_all) Questo potrebbe essere molto lento per i set di risultati di grandi dimensioni. –

+0

Sì, stavo pensando di mantenere modelli coerenti e cose del genere. – MurifoX

+4

@MurifoX - Puoi spiegare perché pensi che distruggere sia meglio dell'eliminazione? Non necessariamente in disaccordo, ma contribuirebbe a rendere la risposta più completa. –

12

Questo dovrebbe funzionare:

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

Nota: Questo non rimuoverà i record dipendenti.

23

Prova questo:

Manager.delete_all(manager_level: 5) 
+0

1. Ho bisogno di usare una variabile per specificare cosa eliminare. 2. La tabella non ha un indice, è una tabella di connettori tra altre 2 tabelle. –

+0

Non ha funzionato per me. Si è verificato un errore a causa dell'integrità referenziale. –

+0

questa dovrebbe essere la risposta accettata, poiché le altre query provano a SELEZIONARE prima di DELETING, causando problemi di prestazioni su set di dati di grandi dimensioni. – toobulkeh

Problemi correlati