2010-09-09 26 views

cevap

25

Gerçek bir TRUNCATE için, ham SQL'i çalıştırmak için execute'u kullanabilirsiniz. modellerini kullanarak

ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{table_name}") 

Kişisel örnekler gerçek TRUNCATE sorguları yapmıyorduk.

  • destroy_allTRUNCATE bir tablo değildir. "Kayıtları eşleştirmek için kayıtların koşullarını yok eder ve yok etme yöntemini çağırır" (link).
  • delete_all daha yakındır - geri aramaları dikkate almaz - ancak yine de TRUNCATE.

execute yöntemini kullanarak, model örneklerini oluşturmadan veritabanındaki satırları siler. Ayrıca

, eklemek sonraki kayıt tabloları bir yok katılmak 1.

0

Katılan tablonuza category_posts denir. Belki modelde tablo adını belirtmeniz gerekmez eğer CategoryPost.destroy_all, çalışması gerekir (CategoryPost)

set_table_name "categories_posts" 

Update, bir CategoryPost modeli yoktur, bu nedenle oluşturulmalıdır:

class CategoryPost < ActiveRecord::Base 
    set_table_name "categories_posts" 
end 
+0

ait kimliğe sahip olacak, böylece, birincil anahtara otomatik artış sıfırlar MySQL en azından gerçek bir TRUNCATE sorgu ilgili model. ör., CategoryPost –

+0

bunu oluşturabilirsiniz – jordinl

İlgili konular