私の Rails アプリには、ページ上で並べ替えることができる一連のオブジェクトがあります (各オブジェクトは、ページ上の他のオブジェクトとの相対的な位置を保存します)。元に戻す/やり直しボタンを実装できるように、これらのオブジェクトの配置方法についてバージョン管理を行いたいと考えています。
PaperTrail gem は、これらのオブジェクトがどのようにソートされているかのツリー構造を保存するための良いオプションかもしれないと考えましたが、問題は、ユーザーがオブジェクトを再配置すると、一部のオブジェクトの位置が変更され、他のオブジェクトは変更されない可能性があり、PaperTrail のみです。オブジェクトが変更されたときにバージョンを保存するようです。私が本当に欲しいのは、モデル内のすべてのオブジェクトの状態のスナップショットを保存できるものです。PaperTrail に強制的にバージョンを保存させて、次のようなものを呼び出せるようにする方法はありますか
@objects.each do |object|
@object = object.versions.scoped.last
@version = Version.find(@object)
@version.reify.save!
end
変更を元に戻すには?または、これを達成するためのより良い方法はありますか?
例(私は2D配列をソートしています):
変更を行う前に:
name | position | ancestry
Step 0 | 0 | 0
Step 1 | 1 | 371
Step 2 | 2 | 371
変更後:
name | position | ancestry
Step 0 | 0 | 0
Step 1 | 1 | 371
Step 2 | 2 | 371/374
元に戻そうとした後:
name | position | ancestry
Step 0 | 0 | 0
Step 1 | 2 | 371
Step 2 | 2 | 371
ステップ 1 の位置は 1 である必要がありますが、オブジェクトは再配置の前後で変化していないため、最後に保存された固有のバージョンに戻ってしまいましたが、これは正しくありません。