2

has_many belongs_toペアに関連付けられているモデルがいくつかあります。デモンストレーションのために、クライアントには 1 つのサーバーがありますが、サーバーには多数のクライアントがあります。私はこのようなことをするかもしれません:

client1.server = the_server
client2.server = the_server
client3.server = the_server

私の実際のアプリケーションはこれよりもかなり複雑ですが、この例は説明のために機能します。

これらのオブジェクトを保存する前に、これらのオブジェクト間の関連付けを検査したいと考えています。ただし、ActiveRecord は保存されるまで情報を更新しません。上記の例では、は、 、 、またはのうちの 1 人が保存されるまで、the_serverclient1client2あるかわかりません。client3これにより、active_record の効率が向上することは確かですが、メモリ内のモデル インスタンスが一貫性のない状態のままになります。

クライアントまたはサーバーで、状態を更新するために呼び出すことができるものはありますか?

4

3 に答える 3

1

オブジェクトを呼び出し#reloadて更新します。

于 2009-04-02T01:08:44.077 に答える
0

アソシエーションを作成する逆の方法を使用すると、モデルが保存される前にモデルを確認できます。

the_server.clients << client1
the_server.clients << client2
the_server.clients << client3

ただし、すでに存在するclient1.server場合は、直後にのみ呼び出すことができることに注意してください。the_server

于 2009-04-06T01:36:48.790 に答える
0

次のように開始する場合:

client1 = the_server.clients.build(:name => 'a client', ...)

そうすれば、探しているものが手に入るはずです。

編集:

おっと、あなたの投稿を読み直しましたが、the_serverまだ保存されていないことに気付きました。その場合、おそらく:

client1.server = the_server
the_server.clients << client1

(the_server が既に保存されている場合、これにより client1 が保存されることに注意してください)

また:

the_server.clients.build(:name => 'some client', ..., :server => the_server)

少し冗長なので、おそらくもっと良い方法があります。

于 2009-04-02T18:14:34.930 に答える