레일 : 종속 => :dependent VS : 종속 => :delete_all
레일 가이드에서는 다음과 같이 설명합니다.
다음과 연결된 경우 개체가 추가로 파괴됩니다.
:dependent => :destroy
관련이 있는 경우 삭제됩니다.:dependent => :delete_all
맞아요, 멋있어요.하지만 파괴되는 것과 삭제되는 것의 차이점은 무엇입니까?저는 두 가지를 모두 시도해 보았는데 그것은 같은 일을 하는 것 같습니다.
차이점은 콜백에 있습니다.
그: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
콜백
delete_all이 셀프 테이블에서 여러 데이터를 삭제할 수 있는 관련 요소 삭제 참조:DELETE * FROM table where field = 'xyz'
: 종속 가능한 옵션:
소유자가 삭제될 때 연결된 개체에 대한 작업을 제어합니다.이들은 콜백으로 구현되며 레일즈는 콜백을 순서대로 실행합니다.따라서, 다른 유사한 콜백은 :dependent 동작에 영향을 미칠 수 있으며,:dependent
동작이 다른 콜백에 영향을 줄 수 있습니다.
:destroy
연결된 모든 개체도 삭제됩니다.
:delete_all
연결된 모든 개체를 데이터베이스에서 직접 삭제합니다(콜백이 실행되지 않음).
:nullify
외부 키를 NULL로 설정합니다.콜백이 실행되지 않습니다.
:restrict_with_exception
연결된 레코드가 있는 경우 예외가 발생합니다.
:restrict_with_error
연결된 개체가 있는 경우 소유자에게 오류를 추가합니다.
사용하는 경우:through
옵션에서 조인 모델의 연결은 belongs_to여야 하며 삭제되는 레코드는 관련 레코드가 아닌 조인 레코드입니다.
실제로 주요 차이점은 콜백이 호출되지 않는다는 것입니다.:delete_all
사용되었습니다.하지만 사용할 때:destroy
:after_destroy
,:after_commit
는 해고될
결과적으로, 만약 당신이 가지고 있다면.touch:
이다▁to▁ing좋▁being니습을 사용하는 것이 .dependent: :delete_all
'dependent::dependent'는 'dependent::dependent'입니다.
언급URL : https://stackoverflow.com/questions/2797339/rails-dependent-destroy-vs-dependent-delete-all
'programing' 카테고리의 다른 글
pip 패키지를 로컬이 아닌 글로벌하게 설치하려면 어떻게 해야 합니까? (0) | 2023.06.22 |
---|---|
MongoDB는 부동 소수점 유형을 지원합니까? (0) | 2023.06.22 |
MariaDB: JSON_TABLE 없이 JSON 어레이에 액세스 (0) | 2023.06.22 |
현재 월 및 연도를 가져오는 방법 (0) | 2023.06.22 |
파이썬은 전체적으로 어떻게 관리합니까? (0) | 2023.06.22 |