2009-04-05 13 views
0

ActiveRecordモデルの10個のインスタンスとそのすべてのアソシエーションをメモリに「深くクローン」し、それらのアソシエーションを処理し、メモリ内のオブジェクトを更新し、 1つを選択して元のデータベースに書き戻します。ActiveRecordオブジェクトとアソシエーションのキャッシュ

  1. にはどうしたらいいの深いクローン(すなわち.cloneだけでなく、右下の関連ツリーの下にすべての関連付けをクローニング)?私はこれまでモデルで自分のメソッドを記述しなければならないと仮定しました。

  2. 準備が整うまで、複製されたインスタンスがデータベースに書き戻されないようにするにはどうすればよいですか?

私がしたいことができた場合: - :別の

に1つのモデルのIDを一致て私の主な団体の一つは にhas_manyがあるよう

  1. は、現在のすべてのIDを保持

  2. は依然としてデータベース内にあるかのように各クローンを扱うことができます(つまり、.find_by_idなどが動作します)

おそらく月にスティック? ;あなたは、保存メソッドを呼び出した場合)あなたは...

モデルをやろうとしているかの確認

答えて

1

ない100%が専用のデータベースに保存されます。既存のモデルでsaveを呼び出すと、変更されたデータでデータベースが更新されます。アソシエーションも保存することができますが、実際にはアソシエーションのタイプに依存します。ほとんどの場合、おそらくこれらのモデルでもsaveを呼び出す必要があります。

0

Doh!明白な答えを見る前に、愚かな質問をすることが時々あります。

私の問題は、関連付けられたオブジェクトに変更を加えなければならなかったことです。後でそれらのメモリ内オブジェクトを使用したときに表示されないため、保存しなければならないと考えました。しかし、あなたは正しいです。実際に起こっていたのは、それらを参照する変数が範囲外になったため、代わりにデータベース内の変数にアクセスしていたことです。

私のコードに戻り、これが正しいかどうかを確認します。 http://github.com/DefV/deep_cloning

それは完了だ:...

0

私はDefVの深いクローニングプラグインを使用して、当社の深いクローニングの問題を解決してきました「ものの、深いクローン」それは上の私の質問に答えていない、と述べた

私がこれまで必要としてきたことはすべて、あなたがあなたの関係を非常に注意深く知る必要があることが分かったからです。私のテストではこれを幸いなことに問題視していましたが、私は現時点でそれに取り組んでいます。私はそれを解決しようとしていたこのポストを見つけました:)

しかし、それはかなり便利です。

+0

ありがとうございます。私はとても遅い応答のために謝ったので、しばらくしてきた:) –

関連する問題