2016-11-17 21 views
1

チェンジセットによるモデルのバージョンを注文する最もクリーンな方法は何ですか?Rails Papertrailバージョン変更モデルによる注文モデル差分

私は整数を追跡しています(たとえば、週に失われた体重の量を考慮しています)、最終的に「今週最も失った」ユーザーを表示したいと思います。

私はあなたが一度も見たことのない最も醜い断片をハックすることができました。

私はこれについて賢明な方法がないとは思いません。何かご意見は?

@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

は、記録された重量変化であります一週間に一度?または、週に複数のレコードが存在することがありますか?今日と1週間前の違いは何ですか? – guiniveretoo

+0

言い換えれば、体重変化を例として使用しているので、一定期間にわたって複数の変更をクエリして、今度からそれまでの間にdiffを見つけようとしているのですか、あるいはその期間にわたって1つの変更をクエリしていますか?人々はこの価値を1週間に1回以上入力できますか? – guiniveretoo

+0

@guiniveretoo私のスニペットに基づいて明らかではないかもしれませんが、時間間隔は重要ではありません。例のために、週に1回の更新とみなしてください。しかし、すべてが同じであれば、私は単純に最新のバージョンとその前のバージョンのチェンジセットに基づいてソートしたいと思っています。 (私は明らかに '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

関連する問題