루비는 자신의 코드를 두려워하는 겁쟁이가 아닙니다!
대부분의 경우 정말로 레코드를 완전히 삭제하고 싶습니다. 다른 두 모델 간의 관계를 포함하는 테이블을 고려하십시오. deleted_at
을 사용하고 싶지 않은 경우에는 분명한 경우입니다.
또 다른 한 가지는 데이터베이스 디자인에 대한 접근 방식이 다소 루비 (rubyish)라는 것입니다. 이 deleted_At
항목을 모두 처리해야하는 번거 로움 때문에 테이블에 복잡한 검색어를 쓸 때만 finds
이상이어야합니다. 그리고 애플리케이션의 DB가 많은 공간을 차지할 때 멋지고 반짝이는 루비 코드를 해킹 된 SQL 쿼리로 대체해야합니다. 이 열을 버리면 좋겠지 만 이미 deleted_at
로직을 사용하고 있으므로 앱의 더 큰 부분을 다시 작성해야합니다. 잡았다.
마지막으로 사실 삭제가 사라지면 자연 스럽습니다. 그리고 모델링의 요점은 모델이 기계가 읽을 수있는 용어로 표현하려고 시도한다는 것입니다. 기본적으로 레코드를 삭제하면 영구히 전달됩니다. 그리고 이유는 deleted_at
이 자연스러운 것일 수 있습니다. 나중에 레코드를 복원하거나 유사한 레코드가 원래 레코드와 혼동되지 않도록해야합니다 (사용자 테이블은 사용하려는 장소 일 가능성이 큽니다). 그러나 대부분의 모델에서는 단지 편집증 일뿐입니다.
내가 말할려고하는 것은 사람들이 일반적으로 기대하는 게 아니에요과 경우가 있기 때문에 그것의 암시 적 사용 오류 경향이 아니라 어디 때문에 삭제 기록을 복원 할 수있는 타당성이 명시 적으로 표현 의도해야한다는 것입니다 (created_at
컬럼을 유지하는 것과는 달리) 작은 오버 헤드를 추가합니다.
물론 레코드 삭제를 되돌리려는 경우가 있습니다 (특히 중요한 데이터를 실수로 삭제하면 불필요한 지출이 발생하는 경우). 하지만이를 활용하려면 애플리케이션을 수정하고 양식을 추가해야하므로 다른 행을 모델 클래스에 추가하는 것이 문제가되지 않습니다. 삭제 된 데이터를 저장하는 다른 방법도 있습니다.
IMHO는 모든 모델에 대해 불필요한 기능이며 필요할 때만 켜야하며 모델에 안전을 추가하는이 방법은 특정 모델에 적용 할 수 있습니다. 그리고 이는 이 아니라 기본적으로을 의미합니다.
(이 과거는 railsninja의 가치있는 발언의 영향을 받았습니다).
이것은 말도 안됩니다. 내 대답에 대응. – nitecoder