이 ‘재활용 휴지통’ 기능은 Avo의 DiscardedRecord
가상 리소스로 구현됩니다. 이 리소스는 ActiveRecord 모델이 아닌 배열(ArrayResource) 기반으로, 여러 테이블에 분산된 소프트 삭제 레코드들을 한곳에 모아 보여줍니다. DiscardedRecord
리소스의 records
메서드는 Rails.application.eager_load!
로 모델 로드를 확인하고, Discard::Model
모듈을 포함하는 모델들을 동적으로 순회합니다. 각 모델에 대해 model.unscoped
블록을 사용하여 기본 스코프를 무시하고, model.discarded.find_each
를 통해 소프트 삭제된 레코드를 검색합니다. 검색된 레코드들은 ID, 모델 타입, 실제 레코드, 삭제 시각(discarded_at
) 정보를 포함하는 해시 형태로 수집되며, 최신 삭제 시각 순으로 정렬됩니다. UI 측면에서 fields
메서드는 preview
, model_type
, record_link
, discarded_at
필드를 정의하며, object
필드는 JSON.pretty_generate
를 사용하여 레코드의 전체 JSON 데이터를 미리보기 페이지에서 가독성 높게 제공합니다. 또한, actions
메서드를 통해 Avo::Actions::Undiscard
액션을 정의하여, 사용자가 소프트 삭제된 레코드를 손쉽게 복원할 수 있도록 지원합니다.
Rails에서 Avo와 Discard를 이용한 소프트 삭제 구현: 재활용 휴지통 리소스
Implement soft-delete in Rails with Avo + Discard | by Pentest Team @greenhats.com | Medium
작성자
jeff
발행일
2025년 05월 16일
핵심 요약
- 1 Rails 애플리케이션에서 Avo와 Discard 젬을 활용하여 소프트 삭제된(soft-deleted) 레코드를 관리하는 방법을 설명합니다.
- 2 `Avo::Resources::DiscardedRecord`라는 가상 리소스를 통해 애플리케이션 전반의 모든 소프트 삭제된 항목을 중앙에서 확인하고 복원할 수 있습니다.
- 3 이 구현은 동적 모델 목록, `unscoped` 쿼리, JSON 미리보기 등의 기능을 포함하여 효율적인 데이터 관리를 가능하게 합니다.
도입
Rails 애플리케이션에서 데이터 무결성 및 복원 가능성을 위한 소프트 삭제(Soft Delete) 기법은 중요합니다. 본문은 Ruby on Rails 관리자 패널 Avo와 Discard 젬을 활용하여, 소프트 삭제된 모든 레코드를 중앙에서 관리하고 복원하는 '재활용 휴지통(Recycle Bin)' 기능을 구현하는 방법을 제시합니다. 이는 데이터 관리의 유연성과 편의성을 향상시킵니다.
결론
Avo와 Discard 젬을 활용한 '재활용 휴지통' 구현은 Rails 애플리케이션에서 소프트 삭제된 데이터를 관리하는 매우 효과적이고 사용자 친화적인 솔루션을 제공합니다. 동적인 모델 탐색, `unscoped` 쿼리를 통한 포괄적인 데이터 접근, 그리고 상세한 JSON 미리보기 기능은 관리자가 소프트 삭제된 레코드를 효율적으로 모니터링하고 신속하게 복원하도록 돕습니다. 이는 데이터 관리의 복잡성을 줄이고, 애플리케이션의 견고성 및 운영 효율성을 동시에 향상시키는 데 기여합니다.