[ruby-on-rails] 데이터베이스 테이블에서 모든 레코드 삭제

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 테이블을 지우지 마십시오.