2010-03-21 8 views
7

J'ai une table de 2 champs. Mot et horodatage Ensuite, j'ai ce tableau qui contient quelques mots. Comment supprimer tous les enregistrements de la table qui correspondent aux mots du tableau? Supposons que le modèle s'appelle "Word".Supprimer les enregistrements de la table qui correspond aux données d'un tableau?

Des idées sur la façon d'y parvenir? peut-être faire une boucle dans le tableau et exécuter des requêtes de destruction. Quelqu'un peut-il me diriger ici? merci

Répondre

4

Si vous avez défini des rappels sur le modèle, sql ne les appellera pas. La méthode recommandée dans ce cas est:

deletable_words = [ 'php', 'c++' ] 
objs = Word.find(:all, :conditions => [ "words.word IN (?)", deletable_words]) 
objs.each { |o| o.destroy } 
18

Faites ceci:

Word.delete_all(:words => words_array) 

Cela supprimera les lignes correspondant aux mots dans le tableau donné, dans une instruction SQL.

.: par exemple

words = ["pop", "pop alternative", "r&b"] 
Word.delete_all(:words => words)