2017-10-18 17 views
0

여기에 문제가 있습니다 : 하드 삭제는 부모를 파괴하고 아이를 파괴해야한다는 것을 분명히합니다. dependent: :destroy을 사용하면 문제가 없으며 부모가 파괴되면 자식이 파괴됩니다.카스케이드 삭제 (부드럽고 하드 삭제) ruby ​​

대략 소프트 삭제에 관하여. 나는 부드러운 삭제 사용자 및 그 사용자의 필드를 업데이 트하려는 경우 deleted_at: Time.now. 자사의 소프트 삭제라고하지만 파괴/null 모든 협회/사용자의 종속성 내가 삭제 된 필드를 업데이 트하려는 경우.

보석을 사용하지 않고 어떻게 가능합니까?

+1

보석 사용에있어 문제가 있습니까? 이것은 단순한 문제는 아니지만 [편집증] (https://github.com/rubysherpas/paranoia) 라이브러리는 널리 사용되고 포괄적 인 솔루션입니다. –

+1

나는 내 경력에 비해이 휠을 다시 발명하려는 많은 잘못된 시도를 보았습니다. 내 충고는 도서관을 사용하는 것입니다 !! –

답변

0

나는 모든 어려운 일을 처리 할 수있는 보석을 사용하는 것이 좋습니다. 이는 자신의 솔루션으로 다룰 수 없습니다.

그러나 프로젝트에 추가 라이브러리를 갖고 싶지 않으면 ActiveRecord 콜백을 사용하여 비슷한 것을 구현할 수 있습니다. 콜백은 종종 나쁜 습관으로 취급되지만 이러한 상황에서는 도움이 될 수 있습니다.

모델 destroy 메서드가 호출되기 전에 before_destroy 콜백 http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Callbacks.html 을 트리거 할 수 있습니다. 콜백 내부에서 관련된 모든 데이터를 제거 할 수 있습니다.

또한 모델 정의에서 destroy 메서드를 재정의하여 레코드를 실제 삭제 대신 제거 된 것으로 표시해야합니다.