Rails: обновление объекта, на который ссылаются через различные пути ассоциации - PullRequest
0 голосов
/ 20 мая 2010

У меня есть объект User, который связан с объектом Post через два разных пути ассоциации:

  • Пост - (has_many) -> комментарии - (принадлежит) -> писатель (типа Пользователь)
  • Пост - (принадлежит) -> писатель (типа Пользователь)

Скажите следующее удержание:

user1.name == "Bill"
post1.comments[1].writer == user1
post1.writer == user1

Теперь, когда я извлекаю post1 и его комментарии из базы данных и обновляю post1.comments [1] .writer примерно так:

post1.comments[1].writer.name = "John"

Я бы ожидал, что post1.writer будет равно "John". Но это не так! Это все еще равняется "Биллу".

Так что, похоже, происходит некоторое кеширование, но такого я бы не ожидал. Я ожидал бы, что Rails будет достаточно умен, чтобы загрузить ровно один экземпляр пользователя с именем «Bill»; вместо этого, по-видимому, загружается два отдельных: по одному для каждого пути ассоциации.

Может кто-нибудь объяснить, как это работает точно, и как я должен справляться с этими типами ситуаций "путём Rails"? [править] Неужели я действительно должен засорять свой код операторами reload, как предлагает решение Слободана?

1 Ответ

0 голосов
/ 20 мая 2010

Rails не будет "загружать ровно один экземпляр пользователя". Автор комментариев и Автор сообщений являются отдельными. Вам нужно будет сохранить изменения и перезагрузить Post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...