2011-06-19 20 views
1

ActiveRecordオブジェクトを最も効率的な方法でリクエスト間で永続化する方法を見つけようとしています。ruby​​ on railsでリクエスト間でActiveRecordオブジェクトを永続化する

ユースケースは次のとおりです。ユーザーはいくつかのパラメータを指定し、「プレビューを表示」をクリックします。それが起こると、私はプレビューを生成するために多くのバックグラウンド計算を行っています。多くのActiveRecordオブジェクトがプロセスで作成されます。プレビューを見た後、ユーザは「送信」をクリックする。ここですべてを再計算するのではなく、以前の要求によって作成されたActiveRecordオブジェクトを単に保存したいと思います。これらの2つのリクエストが常に発生するという保証はありません(プレビューを見た後にユーザーがオプトアウトする場合があります。この場合、これらのオブジェクトをパーシスタンスレイヤーから削除したいと思います)。

上記を達成するための実証済みの効率的な方法はありますか?一般的なシナリオのように見えます。データはセッションデータに割り当てられた領域を超える可能性があるため、セッションを使用できません。さらに、ユーザーが技術的にデータを「提出」していないため、これらのオブジェクトをDBに保存しないでください。だから私が探しているのは、2番目のリクエストを実行したときにこれらのオブジェクトの存在を保証できるインメモリ・パーシスタンス・レイヤーです。

ありがとうございました。

答えて

1

汚れた状態でオブジェクトを保存しないと、状態やステータスなどの何らかの制御属性を使用してこれを管理できるため、最適なオプションになるかどうかはわかりません。

これを持っていると、途中でデータを検証し、ユーザーがすべてを送信するまでデータを検証できないため、非常に優れています。私はRyan Batesがこの種の複雑な形式(http://railscasts.com/episodes/217-multistep-forms)を作成するためのスクリーンキャストを持っていることを知っています。

うまくいけば助けてください。

2

DBに保存するだけで多くの不要な作業を省くことができ、本当に永続的ではない他のレイヤーをアプリケーションに追加することはできません。

可能なアプローチ:state属性を使用して、あなたのレコードがどのような状態であるかを伝えます(例:「ドラフト」、「コミット済み」)。次に、ガベージコレクタを実行して、特定の期間内にコミットされていない下書き(およびそれらの隣接するレコード)を削除します。

0

Cookieベースのセッションを使用しているため、データがセッションデータに割り当てられた領域を超える可能性がありますか?スペースがさらに必要な場合は、アクティブなレコードベースのセッションを使用しないでください。 Cookieベースのセッションから変更することは自明で、実際には推奨される方法です(なぜそれが私が知らないデフォルトではないのですか)

関連する問題