【发布时间】:2010-05-21 05:32:10
【问题描述】:
我有一个 User 对象,它通过两个不同的关联路径与 Post 对象相关:
- Post --(has_many)--> cmets --(belongs to)--> writer(用户类型)
- 帖子--(属于)--> 作家(用户类型)
说出以下保持:
user1.name == "Bill"
post1.comments[1].writer == user1
post1.writer == user1
现在,当我从数据库中检索 post1 及其 cmets 并像这样更新 post1.cmets[1].writer 时:
post1.comments[1].writer.name = "John"
我希望 post1.writer 也等于“John”。但事实并非如此!它仍然等于“比尔”。
所以似乎有一些缓存正在进行,但我没想到会发生这种情况。我希望 Rails 足够聪明,可以准确地加载一个名为“Bill”的用户实例;相反,它似乎加载了两个单独的:每个关联路径一个。
有人能解释一下这究竟是如何工作的,以及我如何以“Rails 方式”处理这些类型的情况吗? [编辑] 我真的应该像 Slobodan 的解决方案所建议的那样在我的代码中乱扔 reload 语句吗?
【问题讨论】:
标签: ruby-on-rails