Ruby on Rails 앱에서 데이터베이스 테이블 중 하나의 모든 레코드를 어떻게 삭제합니까?
답변
SQL없이 방법을 찾고 있다면 delete_all을 사용할 수 있어야합니다.
Post.delete_all
또는 기준
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
자세한 내용은 여기 를 참조하십시오.
레코드는 먼저로드하지 않고 삭제되므로 매우 빠르지 만 삭제시 실행되는 레일 코드에 따라 카운터 캐시와 같은 기능이 중단됩니다.
답변
SQL을 통해 삭제하려면
Item.delete_all # accepts optional conditions
각 모델의 destroy 메소드를 호출하여 삭제하려면 (비싸지 만 콜백이 호출되도록 함)
Item.destroy_all # accepts optional conditions
여기 전부
답변
데이터베이스를 완전히 비우고 연결된 모델을 삭제하지 않고 다음을 수행 할 수 있습니다.
rake db:purge
당신은 또한 테스트 데이터베이스에서 할 수 있습니다
rake db:test:purge
답변
모든 모델의 모든 인스턴스를 삭제한다는 의미라면
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
답변
BlogPost.find_each(&:destroy)
답변
모델의 이름이 BlogPost 인 경우 다음과 같습니다.
BlogPost.all.map(&:destroy)
답변
모든 테이블의 모든 항목을 삭제하려는 경우 최신 답변 :
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 테이블을 지우지 마십시오.