[RUBY-ON-RAILS] 파괴와 삭제의 차이
RUBY-ON-RAILS파괴와 삭제의 차이
차이 사이는 무엇인가
@ model.destroy 및 @ model.delete
예를 들면 :
Model.find_by(col: "foo").destroy_all
//and
Model.find_by(col: "foo").delete_all
나는 둘 중 하나를 사용하는 경우 정말 중요합니까?
해결법
-
==============================
1.삭제하지 않는 동안 기본적으로 모델에서 실행되는 어떤 콜백을 파괴한다.
삭제하지 않는 동안 기본적으로 모델에서 실행되는 어떤 콜백을 파괴한다.
레일 API에서 :
-
==============================
2.전용 DB에서 관련 어린이의 기록 DB에서가 아니라 현재의 오브젝트 레코드를 삭제합니다 삭제합니다.
전용 DB에서 관련 어린이의 기록 DB에서가 아니라 현재의 오브젝트 레코드를 삭제합니다 삭제합니다.
DB에서 관련 아동 기록도 DB에서 현재 개체 기록을 삭제합니다 파괴한다.
이들의 사용은 정말 중요한 :
당신의 여러 부모 객체가 일반적인 아이들 객체를 공유하는 경우, 다른 여러 부모들 사이에서 공유되는 아이들의 개체를 삭제합니다 특정 상위 개체에 파괴 호출.
-
==============================
3.당신이 파괴 또는 액티브 오브젝트에 destroy_all 호출 할 때, 액티브 '파괴'과정이 시작됩니다, 그것은, 클래스 당신에게있는 거 삭제는, 그것이 종속성을 무엇을해야하는지 결정 등의 검증을 통해 실행을 분석
당신이 파괴 또는 액티브 오브젝트에 destroy_all 호출 할 때, 액티브 '파괴'과정이 시작됩니다, 그것은, 클래스 당신에게있는 거 삭제는, 그것이 종속성을 무엇을해야하는지 결정 등의 검증을 통해 실행을 분석
삭제 또는 객체에 DELETE_ALL 호출하면, 액티브 단지 TABLENAME에서 DELETE를 실행하려고 WHERE 다른 액티브 수준의 작업을 수행하지 않는 DB에 대한 조건 쿼리.
-
==============================
4.예를 두 가지 방법 사이의 차이가 큰 사용 DELETE_ALL 당신은 기록이 모델 콜백을 호출하지 않고 신속하게 삭제하려면
예를 두 가지 방법 사이의 차이가 큰 사용 DELETE_ALL 당신은 기록이 모델 콜백을 호출하지 않고 신속하게 삭제하려면
당신이 당신의 모델에 관심 있다면 콜백은 다음 destroy_all를 사용
공식 문서에서
http://apidock.com/rails/ActiveRecord/Base/destroy_all/class
-
==============================
5.기본적으로 "삭제"레코드를 삭제하기 위해 데이터베이스에 직접 쿼리를 보냅니다. 이 경우 레일에 (예 : before_destroy 같은) 어떤 콜백이있는 경우 속성이도 삭제됩니다 레코드에 무엇인지 알 수 없습니다.
기본적으로 "삭제"레코드를 삭제하기 위해 데이터베이스에 직접 쿼리를 보냅니다. 이 경우 레일에 (예 : before_destroy 같은) 어떤 콜백이있는 경우 속성이도 삭제됩니다 레코드에 무엇인지 알 수 없습니다.
은 "파괴"방법은 전달 된 ID를한다 "찾기"방법을 사용하여 데이터베이스에서 모델을 가져, 다음 호출은에 파괴한다. 이 콜백이 트리거되는 것을 의미한다.
당신은 당신이 콜백이 트리거 또는 더 나은 성능을 원하는하지 않으려면 "삭제"를 사용할 것입니다. 그렇지 않으면 (대부분의 시간) 당신은 "파괴"를 사용하는 것이 좋습니다.
-
==============================
6.이미 답변을 많은; 좀 더와에 뛰어 싶었다.
이미 답변을 많은; 좀 더와에 뛰어 싶었다.
문서 :
삭제 verbage를가 액티브 :: Association.has_many 및 액티브 :: 자료에 대해 다르게 작동합니다. 후자의 경우, SQL 삭제하고 모든 검증 / 콜백 바이 패스 실행됩니다 삭제합니다. 협회에 전달 따라 옵션 : 전자가에 따라 실행됩니다. 그러나, 테스트 기간 동안, 나는 콜백은 삭제하지 DELETE_ALL에 대해 실행 된 다음과 같은 부작용을 발견
의존 : 예를 파괴 :
class Parent < ApplicationRecord has_many :children, before_remove: -> (_) { puts "before_remove callback" }, dependent: :destroy end class Child < ApplicationRecord belongs_to :parent before_destroy -> { puts "before_destroy callback" } end > child.delete # Ran without callbacks Child Destroy (99.6ms) DELETE FROM "children" WHERE "children"."id" = $1 [["id", 21]] > parent.children.delete(other_child) # Ran with callbacks before_remove callback before_destroy callback Child Destroy (0.4ms) DELETE FROM "children" WHERE "children"."id" = $1 [["id", 22]] > parent.children.delete_all # Ran without callbacks Child Destroy (1.0ms) DELETE FROM "children" WHERE "children"."parent_id" = $1 [["parent_id", 1]]
from https://stackoverflow.com/questions/22757450/difference-between-destroy-and-delete by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 포맷 날짜를 레일 (0) | 2020.02.11 |
---|---|
[RUBY-ON-RAILS] 컨트롤러에서 다른 컨트롤러 액션을 호출 난간 (0) | 2020.02.11 |
[RUBY-ON-RAILS] ActionController :: InvalidAuthenticityToken (0) | 2020.02.11 |
[RUBY-ON-RAILS] 3 레일 : 여러 선택은 협회를 통해 has_many와 함께 (0) | 2020.02.11 |
[RUBY-ON-RAILS] 레일에서 데이터베이스를 시드하는 가장 좋은 방법은 무엇입니까? (0) | 2020.02.11 |