Удалить записи из таблицы, которая соответствует данным в массиве? - PullRequest
7 голосов
/ 21 марта 2010

У меня есть таблица из 2 полей. Слово и метка времени. Тогда у меня есть этот массив, который содержит несколько слов. Как удалить все записи в таблице, которые соответствуют словам в массиве? Предположим, что модель называется «Слово».

Есть идеи, как этого добиться? возможно перебрать массив и выполнить несколько запросов уничтожения. Кто-нибудь может направить меня сюда? спасибо

Ответы [ 2 ]

18 голосов
/ 21 марта 2010

Сделайте это:

Word.delete_all(:words => words_array)

Это удалит строки, соответствующие словам в данном массиве, в ОДНОМ операторе SQL.

например:.

words = ["pop", "pop alternative", "r&b"]
Word.delete_all(:words => words)
4 голосов
/ 21 марта 2010

Если вы определили обратные вызовы на модели, то sql не будет их вызывать.Рекомендуемый способ в этом случае:

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