답변:
차이점은 콜백입니다.
:delete_all
응용 프로그램에서 직접 및 SQL에 의해 삭제됩니다 :
DELETE * FROM users where compagny_id = XXXX
를 사용하면 :destroy
모든 자녀를 인스턴스화 할 수 있습니다. 따라서 파괴 할 수 없거나 각자 고유 :dependent
한 콜백을 호출 할 수 있습니다.
Rails의 모델 연관에서 :dependent
옵션을 지정할 수 있으며, 다음 세 가지 형식 중 하나를 취할 수 있습니다.
:destroy/:destroy_all
연관된 객체는 destroy
메소드 를 호출하여이 객체와 함께 파괴됩니다.:delete/:delete_all
모든 관련 객체는 :destroy
메소드 를 호출하지 않고 즉시 파괴됩니다.:nullify
연결된 모든 객체의 외래 키는 콜백 NULL
을 호출하지 않고 설정됩니다.save
:restrict
. : restrict로 설정하면 연결된 개체가있는 경우이 개체를 삭제할 수 없습니다.
:delete
또는 :destroy_all
그것의 외모 옵션? : dependent 옵션에는 : destroy, : delete_all, : nullify 또는 : restrict (: delete)가 필요합니다.
:delete
및 :destroy_all
옵션이 없습니다. 그러나이라고 모델 클래스의 방법이있다 delete
하고 destroy_all
그래서 혼란의 원인이 될 수 있습니다.
참조 삭제에게 관련 요소를 파괴 곳 DELETE_ALL 자기 테이블에서 여러 데이터를 삭제할 수 있습니다 로DELETE * FROM table where field = 'xyz'
가능한 옵션 :
소유자가 소멸 될 때 연관된 오브젝트에 발생하는 상황을 제어합니다. 이것들은 콜백으로 구현되며 Rails는 콜백을 순서대로 실행합니다. 따라서 다른 유사한 콜백은 : 종속적 인 동작에 :dependent
영향을 줄 수 있으며이 동작은 다른 콜백에 영향을 줄 수 있습니다.
:destroy
관련된 모든 객체도 파괴됩니다.
:delete_all
연관된 모든 객체가 데이터베이스에서 직접 삭제되도록합니다 (따라서 콜백은 실행되지 않습니다).
:nullify
외래 키를 NULL로 설정합니다. 콜백이 실행되지 않습니다.
:restrict_with_exception
연관된 레코드가있는 경우 예외가 발생합니다.
:restrict_with_error
연관된 오브젝트가있는 경우 소유자에게 오류가 추가됩니다.
:through
옵션 과 함께 사용하는 경우 , 결합 모델의 연관은 belongs_to 여야하고, 삭제 된 레코드는 연관된 레코드가 아닌 결합 레코드입니다.