8

CSV に変換し、カスタム インポート スクリプトを使用して Rails ベースのアプリケーションにインポートする項目のスプレッドシートがあります。

スプレッドシートには各レコードの行が含まれていますが、一部の行には以前の行の異なるバージョンが含まれています。

CSV をインポートするとき、私は現在、「past_version」フィールドを使用して 2 行目をマークしていますが、完全なバージョニング gem を実装する方がはるかに優れた方法であると考えています。

私は PaperTrail のドキュメントを読んでいますが、私が求めているものには完璧に見えますが、インポート スクリプトの一部としていくつかの行のバージョンを作成する必要があります。これは PaperTrail で実行できますか?

基本的に、インポートを開始する必要があります。たとえば、レコード 1、2、3、4、5 が正常に追加され、レコード 6 は実際にはレコード 2 の新しいバージョンであるため、PaperTrail バージョンを手動で作成する必要があります。

これは可能ですか?

4

3 に答える 3

8

@Flori の touch_with_version アプローチは機能しましたが、paper_trailtouchは記録可能なイベントを作成したときにこのメソッドを非推奨にしました。

paper_trail の最新バージョンでは、次のことができます。

model.paper_trail.save_with_version

古いバージョンを使用していて、これが利用できない場合は、record_updateメソッドを使用できます (これはsave_with_version内部で使用するものです):

model.paper_trail.record_update(force: true, in_after_callback: false)

イベントをカスタマイズする方法はありません...作成、復元、更新、タッチはできますが、少なくとも「手動」として記録するなどのことはできません。

将来のバージョンで変更される可能性のある内部を呼び出しているため、これを行うことでさえ少し危険です。バージョンごとに変更されたいくつかの必須パラメータもあります。

私の場合、paper_trail とパラノイアを一緒に使用しており、上記のようなことをしない限り、paper_trail をバイパスするように見える明示的なバージョンを復元時に記録したいと考えていました。

于 2019-01-12T16:46:03.120 に答える
1

誰かがこの問題に出くわした場合: それは可能です! touch_with_version次のように任意の PaperTrail モデルを呼び出すことができますmymodel.paper_trail.touch_with_version。それはあなたのためのバージョンを作成します。

于 2016-11-15T09:06:37.587 に答える