2009-04-15 11 views
1

イベント時にいくつかの(異なる)レコードのスナップショットを保存することについてのアイデアを探しています。例えば、ユーザはアプリケーションからドキュメントを取得します。後で再生することができる。どのような戦略をお勧めしますか?現在の値を持つ表と同じ表を使用するか、履歴表を使用するか?あなたはその仕事で私を助けてくれるプラグインを知っていますか?あなたの考えと解決策を教えてください。Railsでヒストリカルデータを保存/取得するためのテクニック

答えて

2

私はこれをもう一度やりました。私たちは、ログインしたかったテーブルに非常に類似した構造を持っていた新しいテーブルを作成し、私たちは何かをログに記録するために必要な時はいつでも、私たちはこれに似た何かをやった:

attr = object_to_log.attributes 
# Remove things like created_at, updated_at, other unneeded columns 
log = MyLogger.new(attrs) 
log.save 

をプラグイン/宝石がある非常に良いチャンスがありますしかし、このようなものをする。

2

私はこのようなもののためにacts_as_versionedを使用しました。

+0

あなたのリンクが正しく動作していません。代わりにこのリンクに行くように促します。http://github.com/technoweenie/acts_as_versioned/tree/master – MattC

+0

リンクの正確なURLはどれくらい奇妙ですか。あなたが404ページにいるときにアドレスバーでもう一度戻ると、正しい場所に移動します。 Githubは今日リリースしているので、私は物事が落ち着くと思う。 –

3

これにはいくつかのプラグインがあります。

Acts_audited 

監査対象として、すべての監査対象オブジェクトに対して1つのテーブルが作成され、既存のテーブルは変更する必要はありません。変更ごとにエントリを取得します。変更は、変更の種類(CRUD)のメモフィールドにハッシュとして格納されます。アプリケーション・コントローラー内の1つのステートメントで、監査するモデルを指定するだけで、セットアップが非常に簡単です。 ローリングバックはあなた次第ですが、情報はそこにあります。保存された情報は単なる変更であるため、後続の変更によってオブジェクト全体が困難になることがあります。

Acts_as_versioned 

セットアップが少し複雑です。バージョンを追加するオブジェクトごとに別のテーブルが必要で、既存のテーブルにバージョンIDを追加する必要があります。ロールバックは非常に簡単です。あなたが簡単に違いを強調することができるように、最後のバージョンからの変更のハッシュを提供するgithub上のフォークがあります(私が使用しているものです)。私の推測では、これが最も人気のあるソリューションです。

私は経験がありません:acts_as_revisable。次回はバージョン管理が必要になるので、もっと洗練されたように見えるでしょう。

0

OPは1歳ですが、vestal_versionsを追加すると思います。 1つのテーブルを使用して、各バージョンのシリアル化されたハッシュを追跡します。変更の記録をトラバースすることにより、モデルを任意の時点に戻すことができます。

この投稿のコミュニティのお気に入りと思われる...

関連する問題