2017-04-11 1 views
0

주어진 타임 스탬프를 볼 때 위젯 (버전 아님)을 반환하는 API가 있습니다. 주어진 시간 전에 PaperTrail 버전에서 개체를 가져 오는 방법은 무엇입니까?

widget.paper_trail.version_at(timestamp) 

하지만 내 경우에는

, 나는 그것이 주어진 타임 스탬프 전에 를 보았다로 위젯을 싶어. 그래서, 나는이 시나리오를 달성하기 위해 version_before api가있을 것이라고 기대할 것입니다. 그러나 나는 해결책을 찾지 못했습니다.

예를 들어 2016 년 12 월에는 체중이 50kg 인 남성 (A 씨)과 체중이 45kg 인 여성 (B 씨)이 있습니다. 한 달 후, 2017 년 1 월에 여성의 체중이 50kg (여성의 체중을 업데이트하여 종이 트레일에 업데이트 이벤트 버전이 기록되도록 함) 인 반면 남성의 체중은 50kg으로 유지됩니다.

시나리오, 나는 2017 년 1 월에 50kg의 몸무게를보고 싶습니다. 두 사람을 결과로 기대합니다.

다음은 지금까지 PaperTrail에서 시도한 내용입니다.

from_date = '2017-01-01' 
to_date = '2017-01-31' 
ids  = [] 
PaperTrail::Version.where('DATE(created_at) BETWEEN ? AND ?', from_date, to_date).find_each do |version| 
    ids << version.item_id if v.changeset[:weight] && v.changeset[:weight][1] == 50 
end 
People.where(id: ids) #=> Ms. B 

PaperTrail은/CRUD 만 변경되었으므로 Mr. A를 예상 한 결과로 얻을 수 없습니다.

아무도 내 시나리오로 생각해 본 경험이 있습니까? 모든 의견이나 답변이 도움이 될 것입니다.

답변

0

FormGeneratorForm 모델에 대한 레코드가 이미 존재하면 has_paper_trail을 추가 한 것과 같은 양식 생성기에서 비슷한 문제가 발생했습니다. 기존 양식에는 사용할 수있는 버전이 없습니다. 내 결말을내는 해결책은 created_at 타임 스탬프 만 업데이트하는 테이블의 각 레코드 touch_with_version에 짧은 레이크 작업을 작성하여 레코드의 기존 내용을 변경하지 않고 각 양식의 첫 번째 버전을 만드는 것입니다.

class VersionExistingForms 
    def self.execute 
    FormGeneratorForm.find_each(&:touch_with_version) 
    end 
end 
관련 문제