programing

레일 : 종속 => :dependent VS : 종속 => :delete_all

powerit 2023. 6. 22. 22:32
반응형

레일 : 종속 => :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

반응형