Можете ли вы принудительно обновить ассоциации activerecord, не сохраняя их? - PullRequest
2 голосов
/ 02 апреля 2009

У меня есть пара моделей, которые связаны с парой has_many belongs_to. Для наглядности у клиента есть один сервер, а на сервере много клиентов. Я мог бы сделать что-то вроде этого:

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

Мое собственное приложение немного сложнее, но этот пример будет работать для иллюстрации.

Я хочу проверить связи между этими объектами, прежде чем сохранить их. ActiveRecord не обновляет их информацию, пока они не будут сохранены. В приведенном выше примере the_server не знает, кто такие client1, client2 или client3, пока один из них не будет сохранен. Я уверен, что это помогает эффективности active_record, но оставляет экземпляры модели в памяти в несогласованном состоянии.

Могу ли я позвонить клиентам или серверу, чтобы они обновили свои состояния?

Ответы [ 3 ]

1 голос
/ 02 апреля 2009

Позвоните #reload на объекты, чтобы обновить их.

0 голосов
/ 06 апреля 2009

Если вы используете обратный способ создания ассоциации, то вы можете просмотреть модели до того, как они будут сохранены:

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

Обратите внимание, что вы можете позвонить client1.server сразу после того, как the_server уже существует.

0 голосов
/ 02 апреля 2009

Если вы начинаете так:

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

Тогда ты должен получить то, что ищешь, я думаю.

EDIT:

Упс, я перечитал ваш пост и понял, что the_server еще не был сохранен. В этом случае, возможно:

client1.server = the_server
the_server.clients << client1

(учтите, что это сохранит client1, если the_server уже сохранен)

или

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

Немного избыточно, так что, возможно, есть лучший выход.

...