데이터베이스 테이블의 모든 레코드 삭제
루비 온 레일즈 앱의 데이터베이스 테이블 중 하나에 있는 모든 레코드를 삭제하려면 어떻게 해야 합니까?
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 테이블을 지우지 않도록 합니다.
관계가 있는 모델이 있는 경우 관련된 모델도 제거해야 합니다.
이를 위한 가장 빠른 방법:-
- 테이블에서 모든 데이터를 삭제하려고 합니다.
Post.delete_all
- 표에서 특정 데이터를 삭제하려는 경우 올바른 방법은 다음과 같습니다.
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
'programing' 카테고리의 다른 글
UI 테이블 보기 섹션 사이의 공간 줄이기 (0) | 2023.06.05 |
---|---|
ggplot에서 모든 x축 레이블 제거 (0) | 2023.06.05 |
루비 배열에서 문자열로 변환 (0) | 2023.06.05 |
org.gradle.api.message.리소스 예외:Android Studio 3.2에서 리소스를 가져올 수 없습니다. (0) | 2023.06.05 |
파이썬의 EAFP 원칙은 무엇입니까? (0) | 2023.06.05 |