2016-11-17 1 views
1

변경 세트를 사용하여 모델 버전을 가장 깨끗하게 정리하는 방법은 무엇입니까?레일 Papertrail 버전 주문 변경 모델 별 차이 Diff

정수를 추적 중이므로 (예 : 주당 손실 된 무게를 고려) 궁극적으로 "이번 주 가장 많이 잃어버린"사용자를 표시하고 싶습니다.

나는 당신이 함께 본 적이있는 가장 못된 발췌 문장을 해킹 할 수 있었고 아래에 그것을 포함시키고 있습니다.

나는 이것을 위해 영리한 방법이 없다고 생각하지 않습니다. 이견있는 사람?

@scoreboard ||= PaperTrail::Version.where(item_type: "WorkoutLog").map do |version| 
    if version.changeset['weight'] 
    first = version.changeset['weight'][0] 
    last = version.changeset['weight'][1] 

    next if first.nil? || last.nil? 

    diff = last - first 
    {diff: diff, id: version.item_id} 
    end 
end 
+0

이 기록 된 체중 변화 그리고 대부분의 손실에 대한 객체를 조회 할 많은 간단한 얻는다 일주일에 한 번? 또는 당신이 원하는 것은 오늘과 일주일 전의 차이점 일주일에 여러 레코드가있을 수 있습니까? – guiniveretoo

+0

예를 들어 체중 변경을 사용했기 때문에 일정 기간 동안 여러 변경 사항을 쿼리하고 현재와 다음 사이에 차이점을 찾으려고 했습니까? 아니면 기간별로 하나의 변경 사항을 쿼리하고 있습니까? 사람들이 일주일에 한 번 이상이 값을 입력 할 수 있습니까? – guiniveretoo

+0

@guiniveretoo 내 스 니펫을 기반으로 명확하지 않을 수도 있지만 시간 간격은 중요하지 않습니다. 예를 들어, 주간 업데이트로 간주하지만, 모든 것이 동일하면, 나는 단순히 최신 버전과 그 이전 버전으로 변경 세트를 기반으로 정렬하기를 원할뿐입니다. (분명히'object_changes' 컬럼을가집니다). 이해가 되니? –

답변

0

'diff'의 주요 추적 시스템으로 PaperTrail 사용을 중단하십시오. 시스템의 최상급 데이터베이스 개체로 만드십시오. 당신은 당신의 관련 개체에 대한 최신 변경 찾으려

DeltaWeight.where(created_at: 7.days.ago..Time.now).order(:amount_changed) 

또는 경우에

:

DeltaWeight.order(:created_at).group(:user) 
+0

입력에 감사드립니다. 불행히도, 나는 멈출 수없고 모든 것을 바꿀 수 없다. 궁극적으로 Papertrail은이 문제보다 더 큰 생태계에 뿌리를두고 있으며 관련이없는 여러 가지 문제에 대해 우아하게 작동합니다. –

+0

Papertrail을 사용하는 것을 중지하지 않는다 ... 나는이 문제를 해결하기 위해 그것을 사용하지 말라고 말하고있다. – guiniveretoo