2012-06-12 47 views
1

我正在試用rails guide中給出的self join example。我在表格中添加了一個'manager_id'字段。Rails協會不會自動保存

問題是,在關聯這兩個對象之後,直到我調用'save'時纔會反映出來。

我在開發模式進行了測試通過控制檯:

> boss, emp = 2.times.map { FactoryGirl.create :employee } 
> emp.manager = boss 
> emp.manager_id == boss.id 
=> true 
> boss.subordinates 
=> [] 

如果我現在保存「EMP」,我得到了想要的結果。

> emp.save 
> boss.subordinates 
=> [#Employee obj] 

這是爲什麼?我是否也必須使用相同的方法編寫測試用例呢?不知何故,我覺得我做錯了,應該有更好的方法。

回答

1

在你的第一個代碼示例中,你的emp實例已經被分配了一個管理器,但是你的boss對象沒有任何下屬,但是數據庫中沒有任何下屬。

直到你調用保存在emp上,ActiveRecord不會知道你將boss作爲管理器添加到另一個對象。當您調用保存時,記錄將被保存到數據庫。

將測試腳本的記錄保存到數據庫沒有任何問題,只要您有一個清理腳本,在您創建腳本後會刪除不需要的記錄。這也將測試您的模型的驗證和關聯。

+0

感謝您的明確解釋。 –

1

當你調用boss.subordinates,ROR作出這樣的SQL請求:

Select * from subordinates where subordinates.id = #{id} 

你的情況存在數據庫下屬沒有記錄,你什麼也得不到。

您必須在數據庫中保存記錄,以使您的關聯工作。