2012-10-10 2 views

답변

58

내가 대신 삭제의 파괴 사용하는 것이 좋습니다 생각 :

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

확실히 유효하지만 다음 사항에 유의하십시오. "각 레코드를 인스턴스화하고 destroy 메소드를 호출하여 조건과 일치하는 레코드를 삭제합니다." (http://apidock.com/rails/ActiveRecord/Relation/destroy_all) 이것은 큰 결과 집합에 대해서는 매우 느릴 수 있습니다. –

+0

그래, 나는 모델 일관성과 물건을 유지하는 것에 대해 생각하고 있었다. – MurifoX

+4

@ MurifoX - 파괴가 파괴보다 낫다고 생각하는 이유를 설명 할 수 있습니까? 반드시 동의하지 않아도되지만, 답을보다 완벽하게 작성하는 데 도움이됩니다. –

12

이 작동합니다 :

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

참고 :이 종속 레코드를 제거하지 않습니다.

23

이 시도 :

Manager.delete_all(manager_level: 5) 
+0

1. I 삭제할 것을 지정하는 변수를 사용해야합니다. 2. 테이블에 인덱스가 없으며 다른 두 테이블 사이의 커넥터 테이블입니다. –

+0

저를 위해 일하지 않았습니다. 참조 무결성으로 인해 오류가 발생했습니다. –

+0

다른 쿼리가 삭제하기 전에 SELECT를 시도 할 때 허용되는 대답이어야하며 대용량 데이터 집합에서 성능 문제가 발생합니다. – toobulkeh

관련 문제