최선의 방법은 무엇일을 구현하는 스타일을 gmail"취소"에서 레?
-
03-07-2019 - |
문제
나는 그것을 가지는 것이 매우 중요"취소"방법 ala gmail 파괴하고 기록을 표시하는 팝업 창에는 말하기를,"하시겠습니까?".
는 방법으로 구현했는"deleted_at"timestamp 열에 모델을 가져오는 경우 타임 스탬프가 파괴 방법은 불
def destroy
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, Time.now)
...
end
하기 되돌리/취소 나는 단지 동일하게 설정하려면 열 nil
def revert
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, nil)
...
end
나는 단지 조건을 추가하려면 필터 떨어져"삭제"foos 때 내가 찾는 방법입니다.아마도 설정 cron 또는 백그라운드 작업은 정말을 파괴하"삭제"foos 수 있습니다.
나를 위해 일하고 구현하기가 쉽지만 내가 궁금하군요가 있다면 더 나은 방법으로 구현하는 이 기능이?어쩌면이 플러그인이나 보석이 제공하는 이는 나는지에 대해 알아?
해결책
실제로 찾을 수있는 플러그인이 있습니다. 민첩한 웹 개발.
다음은 설명과 일치하는 플러그인의 링크 및 요약입니다.
- 편집증 역할을합니다: 활성 기록을 "편집증"로 만드십시오. 삭제하면 행이 삭제되지 않지만 deleted_at 필드를 설정하십시오. 삭제 된 레코드를 건너 뛰기 위해 찾기가 과부하되었습니다.
- 소프트 삭제 가능한 역할을합니다: activeRecord 모델을 부드럽게 삭제하는 기능을 제공합니다.
다른 팁
파일이 있습니다 여기 그것은 당신이 요구하는 일을하는 것처럼 보이지만, 개인적으로 나는 당신이 구체적으로 포함하지 않는 한 삭제 된 레코드를 자동으로 걸러내는 무언가가 있어야한다고 생각합니다. 이렇게하면 매개 변수 또는 리치를 포함하는 이름의 범위를 포함하지 않으면 실제로 삭제 된 것처럼 보입니다.
불행히도, 나는 하나를 쓰지 않았고 여가 시간은 제한되어 있지만 그렇게 어렵지 않아야합니까?
이동할 수 있는 삭제된 항목으로 별도의 컬렉션(또는 테이블,또는 어떤)-다음 보이는 아무것도에서 원래의 목록을 볼 것이는 삭제되었고 처리할 수 있습니다 새로운 목록할 때 편리합니다.
책임 체인 패턴
class Action
{
Perform(context);
Undo(context);
}