복붙노트

[RUBY-ON-RAILS] destroy_all 대 DELETE_ALL?

RUBY-ON-RAILS

destroy_all 대 DELETE_ALL?

나는 테이블에서 삭제 기록에 가장 좋은 방법을 찾고 있어요. 예를 들어, 나는 누구의 사용자 ID 여러 테이블에 걸쳐있는 사용자가 있습니다. 나는이 사용자와 모든 테이블에서 자신의 ID가 모든 레코드를 삭제합니다.

u = User.find_by_name('JohnBoy')
u.usage_indexes.destroy_all
u.sources.destroy_all
u.user_stats.destroy_all
u.delete

내가 DELETE_ALL 시도 그래서이 작품과 모든 테이블에서 사용자의 모든 참조를 제거하지만 나는 그 destroy_all들은 매우 공정 무거웠다. 그것은 단지 자신의 사용자 테이블에서 사용자와 다른 테이블이 null을 만들어 모두에서 ID를 제거하지만 잎 기록 그들에 그대로. 캔 누군가 점유율 어떤 올바른 프로세스는이 같은 작업을 수행하기위한인가?

그 destroy_all이 (가) 모든 관련 개체에 대한 기능을 파괴하지만, 난 그냥 올바른 방법을 확인하려면 호출을 참조하십시오.

해결법

  1. ==============================

    1.당신이 옳아 요. 당신은 사용자와 연관된 모든 객체를 삭제하려면 -> destroy_all 그러나, 당신은 단지 연관된 모든 객체를 억제하지 않고 사용자를 삭제하려면 -> DELETE_ALL

    당신이 옳아 요. 당신은 사용자와 연관된 모든 객체를 삭제하려면 -> destroy_all 그러나, 당신은 단지 연관된 모든 객체를 억제하지 않고 사용자를 삭제하려면 -> DELETE_ALL

    이 게시물에 따르면 : 레일 : 의존 => VS 파괴 : 의존 => : DELETE_ALL를

  2. ==============================

    2.DELETE_ALL은 단일 SQL DELETE 문 아무것도 더있다. (있을 경우) 적어도 NUM_OF_RESULTS SQL 문이 될 수있는 조건 : destroy_all 통화의 일치하는 모든 결과 ()를 파괴한다.

    DELETE_ALL은 단일 SQL DELETE 문 아무것도 더있다. (있을 경우) 적어도 NUM_OF_RESULTS SQL 문이 될 수있는 조건 : destroy_all 통화의 일치하는 모든 결과 ()를 파괴한다.

    용량이 큰 데이터 세트에 같은 destroy_all 등 () 과감한 무언가를해야한다면, 나는 아마 응용 프로그램에서하지 및 관리에 수동으로 처리 할 것입니다. 데이터 세트가 작은 정도 인 경우가 많이 다치게하지 않을 것입니다.

  3. ==============================

    3.destroy_all가 모든 레코드를 인스턴스화하고 한 번에 하나씩 파괴한다는 사실을 방지하기 위해, 당신은 모델 클래스에서 직접 사용할 수 있습니다.

    destroy_all가 모든 레코드를 인스턴스화하고 한 번에 하나씩 파괴한다는 사실을 방지하기 위해, 당신은 모델 클래스에서 직접 사용할 수 있습니다.

    그래서 대신 :

    u = User.find_by_name('JohnBoy')
    u.usage_indexes.destroy_all
    

    넌 할 수있어 :

    u = User.find_by_name('JohnBoy')
    UsageIndex.destroy_all "user_id = #{u.id}"
    

    결과는 모든 관련 기록을 파괴하는 하나 개의 쿼리입니다

  4. ==============================

    4.나는 어떤 상황에서 수동으로 삭제 관련 기록에 대한 필요성을 완화 할 수있는 작은 보석을했습니다.

    나는 어떤 상황에서 수동으로 삭제 관련 기록에 대한 필요성을 완화 할 수있는 작은 보석을했습니다.

  5. from https://stackoverflow.com/questions/6698207/delete-all-vs-destroy-all by cc-by-sa and MIT license