2017-04-11 6 views
0

与えられたタイムスタンプを見て、ウィジェット(バージョンではない)を返すAPIがあります。一定時間前にPaperTrail版からオブジェクトを取得する方法は?

widget.paper_trail.version_at(timestamp) 

しかし、私の場合、私はそれが与えられたタイムスタンプより前を見てウィジェットを取得したいです。だから、私はこのシナリオを達成するためにversion_before APIがあることを期待しています。しかし、私は解決策を見いださなかった。

たとえば、2016年12月に、体重50kgの男性(Aさん)と体重45kgの女性(Bさん)がいます。 1ヵ月後、2017年1月に女性の体重が50kgに増えました(女性の体重を更新して、ペーパートレイルで更新イベントのバージョンを記録すると考えてください)。男の体重は50kgです。

シナリオでは、2017年1月に50kgの体重が見たいと思っています。私は結果として2人を得ることが期待されます。

以下は、これまで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を記録しているので、結果は予想通り、私はA氏を取得することはできません。

誰かが私のシナリオとして考え出した経験がありますか?任意のコメントや回答が参考になります。

答えて

0

FormGeneratorFormモデルのレコードがすでに存在していた後に、has_paper_trailを追加したので、作成しているフォームジェネレータで同様の問題が発生しました。既存のフォームにはバージョン管理はありませんでした。私の終わりの解決策は、created_atタイムスタンプだけを更新するテーブルの各レコードtouch_with_versionに短いレーキタスクを書き込むことでした。レコードの既存の内容を変更せずに各フォームの最初のバージョンを作成しました。

すなわち

class VersionExistingForms 
    def self.execute 
    FormGeneratorForm.find_each(&:touch_with_version) 
    end 
end