2012-10-10 16 views

cevap

58

Ben Silmek yerine imha kullanmak daha iyi olduğunu düşünüyorum:

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

Kesinlikle geçerli, ama akılda tutun: "Kayıtları eşleştirme koşullarını yok ederek her kaydı ve yok etme yöntemini çağırır." (http://apidock.com/rails/ActiveRecord/Relation/destroy_all) Bu, büyük sonuç kümeleri için çok yavaş olabilir. –

+0

Evet, modelleri tutarlı tutmayı düşünüyordum. – MurifoX

+4

@MurifoX - Yok etmenin neden sildiğinden daha iyi olduğunu açıklayabilir misiniz? Mutlaka katılmıyorum, ama cevabınızı daha eksiksiz hale getirmeye yardımcı olur. –

12

Bu çalışması gerekir:

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

Not: Bu bağımlı kayıtları kaldırmaz.

23

bu deneyin:

Manager.delete_all(manager_level: 5) 
+0

1. silen ne belirtmek için bir değişken kullanmak gerekir. 2. Tabloda bir dizin yok, diğer 2 tablo arasında bir bağlayıcı tablo var. –

+0

Benim için çalışmadı. Referans bütünlüğü nedeniyle bir hata oluştu. –

+0

, kabul edilen yanıt olmalıdır, çünkü diğer sorgular SİLME işleminden önce SELECT'i seçmeye çalışmaktadır - büyük veri kümelerindeki performans sorunlarına yol açmaktadır. – toobulkeh

İlgili konular