과제 : 데이터베이스에서 사용자 / 프로필 / 계정 제거를 처리하는 가장 좋은 방법은 무엇입니까?

Rubytastic

챌린지 (비활성화) :

Devise를 사용하여 Rails 4에 소셜 미디어 유형 애플리케이션이 있습니다. 시스템에서 사용자를 삭제하는 좋은 방법을 찾고 있습니다. Facebook에서는 사용자가 계정을 다시 활성화 할 수 있으므로 이제이 기능을

user.deactivated

부울이므로 실제로 데이터베이스에서 레코드를 삭제하지 않습니다.

확인하지 않은 사용자 삭제

레이크 작업을 사용하여 7 일 동안 계정을 확인하지 않은 모든 사용자를 필터링 할 수 있습니다.이 사용자는 데이터베이스에서 정말로 제거하고 싶습니다. 사용자는 확인없이 내 애플리케이션에서 아무것도 할 수 없기 때문에 등록을 "잃어버린"것으로 간주합니다.

데이터베이스에서 실제로 제거 할 때 이러한 사용자를 삭제하는 가장 좋은 전략은 무엇일까요?

각 사용자가 자신의 프로필 / 계정을 가지고 있기 때문에 시스템에서 모든 것을 삭제하는 가장 좋은 방법은 무엇입니까? 임 사용 :

belongs_to  :user, :dependent => :destroy

프로필 / 계정 모델에서 데이터베이스에서 사용자를 삭제하면 다른 모든 관계가 삭제되어야합니다. 이것이 최선의 방법입니까? 시스템을 손상시킬 수있는 고려 사항이 있습니까?

에드거 스 제캅 슨스

이미 시작 했으므로 모델간에 종속성을 두는 것이 좋은 접근 방식이므로 연결된 모든 항목이 제거됩니다 destroy( deleteRails 콜백없이 SQL 쿼리를 실행 하는 것과 혼동 하지 마십시오 ). 나는 최신 프로젝트에서이 기술을 피하기 시작했지만.

나는 DB 청결에 대해 일종의 오래된 학교이므로 일반적으로 보석 을 사용하여 FK 무결성을 강화합니다. 객체를 삭제할 때 (트리거되면 SQL 오류가 발생하므로) 유지 관리의 또 다른 계층이 추가되지만 모델의 한 줄보다 더 안정적입니다. 또한 일반적 으로 모든 종속 개체에서 custom_destroy실행 delete되는 메서드를 모델에 제공하여 이러한 추가 복잡성을 극복 합니다.

def custom_destroy
   self.class.transaction do 
     child_objects.delete_all
     some_other_child_objects.delete_all
     delete
   end
end

10 개의 자식 객체에 destroy_all을 사용하면 10 개의 SQL 쿼리 (+ 모든 콜백)가 실행되기 때문에 속도의 이점을 제공합니다. 반면에이 메서드는 하나의 쿼리 만 수행합니다.

우리는 불필요한 오래된 데이터 (만료 된 항목)를 정리할 필요가 거의 없으며이를 위해 레이크 작업을 사용합니다. Heroku를 사용하는 경우 단순히 Heroku 스케줄러를 사용하고, VPS / 전용 시스템을 사용하는 경우 언제든지 gem 을 사용하는 것에 대해 조언 합니다. Capistrano 와도 잘 통합되어야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관