programing

데이터베이스 테이블의 모든 레코드 삭제

goodsources 2023. 6. 5. 23:51
반응형

데이터베이스 테이블의 모든 레코드 삭제

루비 온 레일즈 앱의 데이터베이스 테이블 중 하나에 있는 모든 레코드를 삭제하려면 어떻게 해야 합니까?

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

각 모델의 파기 방법을 호출하여 삭제(비싸지만 콜백이 호출되도록 보장)

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그리고 우리는 a를 적용할 수 있습니다.delete_all모든 모델에서.

SchemaMigration 테이블을 지우지 않도록 합니다.

관계가 있는 모델이 있는 경우 관련된 모델도 제거해야 합니다.

이를 위한 가장 빠른 방법:-

  1. 테이블에서 모든 데이터를 삭제하려고 합니다.
Post.delete_all
  1. 표에서 특정 데이터를 삭제하려는 경우 올바른 방법은 다음과 같습니다.
Post.where(YOUR CONDITIONS).delete_all
# this above solution is working in Rails 5.2.1, delete_all don't expect any parameter
# you can let me know if this works in different versions.

# In the older version, you might need to do something like this:-
Post.delete_all "Your Conditions"

이 방법은 나에게 효과가 있었고, 아래의 경로를 routes.rb에 추가했습니다.

get 'del_all', to: 'items#del_all' # del_all is my custom action and items is it's controller

def del_all #action in ItemsController
 if Item.any? 
  Item.destroy_all
  redirect_to items_url, notice: "Items were destroyed." 
 else  
  redirect_to items_url, notice: "No item found here." 
 end     
end

설명서에 따르면:

2.5 Singular Resources - 때때로 클라이언트가 ID를 참조하지 않고 항상 검색하는 리소스가 있습니다.예를 들어 /profile을 사용하여 현재 로그인한 사용자의 >profile을 항상 표시하려고 합니다.이 경우 단일 > 리소스를 사용하여 show action: get 'profile', to: 'users#show'에 /profile(/profile/:id가 아님)을 매핑할 수 있습니다.

언급URL : https://stackoverflow.com/questions/5322298/deleting-all-records-in-a-database-table

반응형