2010-05-20 29 views
0

我有一個用戶對象引用的對象,也就是通過兩個不同的關聯路徑相關的發佈對象:滑軌:更新通過不同的關聯路徑

  • 郵政 - (的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等於「約翰」了。但它不!它仍然等於「比爾」。

所以似乎有一些緩存正在進行,但我不會期望的那種。我希望Rails足夠聰明,能夠加載名爲「Bill」的用戶的一個實例;而是似乎加載兩個單獨的:每個關聯路徑一個。

有人可以解釋這是如何工作的,以及我如何處理這些類型的情況下的「Rails方式」? [編輯]我真的應該使用重載語句來拋棄我的代碼,就像Slobodan的解決方案一樣?

回答

0

Rails不會「加載恰好一個用戶的實例」。評論作者和帖子作者是分開的。您必須保存更改並重新加載Post。

+0

好的。這對我來說是一種痛苦,因爲我是通過事件有條件地更新該名稱的(例如,評論中的before_destroy)。由於這與使用post1.writer的代碼相互分離,我該如何優雅地做到這一點(=不要訴諸我的代碼與reload語句,以防萬一...)? – 2010-05-20 11:40:15

+0

如果您銷燬註釋,只需執行銷燬操作,然後重定向到實際上會重新加載記錄的其他頁面。 – 2010-05-21 05:48:41