У меня есть объект 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, как предлагает решение Слободана?