답변:
SQL없이 방법을 찾고 있다면 delete_all을 사용할 수 있어야합니다.
Post.delete_all
또는 기준
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
자세한 내용은 여기 를 참조하십시오.
레코드는 먼저로드하지 않고 삭제되므로 매우 빠르지 만 삭제시 실행되는 레일 코드에 따라 카운터 캐시와 같은 기능이 중단됩니다.
ActiveRecord
모델 이 아닌 테이블이있는 것이 가능하다고 말하고 있습니다 . 질문은 '테이블'에서 레코드를 삭제하는 것에 대해 묻고 대답을하고 있거나 가정하고 있습니다.
모든 모델의 모든 인스턴스를 삭제한다는 의미라면
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
select
하면, 블록 내부에있는 경우 표현식을 사용하는 체인은 피하기 이런 식으로 전무 요소를 제거 할 수있는 컴팩트 한 방법을 필요로 할 때마다.
모델의 이름이 BlogPost 인 경우 다음과 같습니다.
BlogPost.all.map(&:destroy)
MOPED: 127.0.0.1:27017 QUERY database=a_database collection=nothings selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3378ms)
모든 테이블의 모든 항목을 삭제하려는 경우 최신 답변 :
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
eager_load
여기 에 대한 자세한 정보 .
그것을 호출 한 후, 우리는 모든 자손에게 접근 ActiveRecord::Base
할 수 있고 delete_all
모든 모델에 적용 할 수 있습니다 .
SchemaMigration 테이블을 지우지 마십시오.