3

関連付けられたモデルがたくさんあるクラスの質問があります。私のアプリの1ページに、現在のすべての質問の概要と、関連するレコードからのさまざまな情報を一覧表示します。最終的に、これは値のハッシュであり、それをcsvスタイルの行に出力します(これ以降、これを「行ハッシュ」と呼びます)

現在、特定の期間における質問(または関連データ)の変更のみを表示する必要があります。私は現在、これを行うための最良の方法を検討しています。これまでに私が持っていたいくつかのアイデアがあります。フィードバック、考え、提案などを歓迎します。

1)アプローチ1-acts_as_auditedこれは、他のアプリで以前に使用したことがあるので、私の最初の考えでした。ただし、aaaの問題は、レコードのデータへの変更のみを追跡することです(つまり、関連付けが変更されてもかまいません)。したがって、関連するすべてのレコードを監査することもできますが、異なる監査レコードを結び付けることによって変更されたものをつなぎ合わせようとすると、悪夢のように聞こえます。

2)古いハッシュと新しいハッシュをシリアル化されたフィールドに保存します。つまり、誰かが質問/編集ページに移動すると、現在の行ハッシュを計算して、質問テーブルのシリアル化されたフィールド「old_data」に保存します。次に、質問を保存した後、新しい現在の行のハッシュを計算し、質問テーブルのシリアル化されたフィールド「new_data」に保存します。また、2つのシリアル化されたハッシュを比較し、その違いを別のシリアル化されたハッシュフィールド「変更」に保存します。レポートを作成するために、過去x日間に更新された質問を探し、その変更データを出力します。

3)ビューを作成します-出力したいデータに対応するビューを作成します(つまり、レポートに取り込むすべてのデータを統合します)。次に、ビューへの変更を追跡します-どういうわけか。どれだけ正確にそれをするのかわかりません。

私は今、オプション2に傾いています。

他の考え/コメントはありますか?任意の提案に感謝します-最大。

4

3 に答える 3

1

ちょっと私は同様の問題を抱えていました。これをチェックしてください。可能であれば、Mongoid または Mongomapper を使用してください。埋め込まれたバージョン管理されたドキュメントは便利です。

于 2010-07-22T15:13:46.110 に答える
1

つまり、あなたが言ったように、時間 x と時間 y の間のレコードへの変更のみを表示したいのですね。act_as_audited プラグインを使用すると、変更のテーブルが作成されるので、これは私には完璧に思えますよね? したがって、質問からこれらすべての関連テーブルへの has_many_through 関連付けを作成し、関連する変更を検索します。ここで、作成日は時間 X より後です。これにより、変更のリストが返されます。そこから、必要に応じてこのリストを親オブジェクトに接続することもできますが、最終的には検索する方が合理的なように思えます。関連オブジェクトのリストを探しているのではなく、結局のところ、変更のリストを探しているので、変更のテーブルを用意することはそれを達成するための合理的な方法のように思えますか?

于 2010-07-21T12:22:39.050 に答える
0

みんなありがとう。私が本当に必要としていたのは、オブジェクトで呼び出されたさまざまなメソッドの結果の変更をキャプチャすることであり、その一部には関連オブジェクトが含まれていたため、独自のソリューションを展開することになりました。関連付けられたオブジェクトにはあまり興味がありませんでした (たとえば、いくつかの異なる関連付けられたオブジェクトを見た結果として生成されたテキスト文字列など)。これらすべてを実行するためのメソッドが既にあったので、これらのメソッドを呼び出した結果の変化を追跡する必要がありました。

私が見たプラグインはどれも実際にそれを簡単かつ効果的に行うことができなかったので、これらすべてのメソッド呼び出しの結果を持つシリアル化されたハッシュを保持するだけの状態と呼ばれるテーブルの作成を終了しました. これは、レコードが変更されて保存されるとき、または関連する関連オブジェクトのいずれかが変更されて保存されるときに保存されます。次に、保存されたさまざまな状態レコード間の違いを返すメソッドがいくつかあります。それは私のニーズにうまく機能します。とにかくアドバイスをありがとうございました。

于 2010-07-23T09:21:07.690 に答える