2010-03-21 4 views
7

나는 2 개의 필드로 이루어진 테이블을 가지고있다. 단어 및 타임 스탬프. 다음 몇 가지 단어가 들어있는이 배열이 있습니다. 배열의 단어와 일치하는 테이블의 모든 레코드를 어떻게 삭제합니까? 모델을 "Word"라고 가정합니다.배열의 데이터와 일치하는 테이블의 레코드를 삭제 하시겠습니까?

달성 방법에 대한 아이디어가 있으십니까? 어쩌면 배열을 통해 반복하고 일부 파괴 쿼리를 실행하십시오. 아무도 날 여기로 안내 할 수 있니? 감사합니다

답변

4

모델 bare sql에서 콜백을 정의한 경우 호출하지 않습니다. 이 경우 권장되는 방법은 다음과 같습니다

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

이를 수행

Word.delete_all(:words => words_array) 

이 하나의 SQL 문에서, 지정된 배열에있는 단어와 일치하는 행을 삭제합니다.

예컨대 :

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