2011-08-07 21 views
0

我有一個任務模型和用戶模型。belongs_to with:class_name behaved odd

任務可以分配給用戶進行處理,而用戶可以分配許多任務。

字段名稱有點關閉,所以我嘗試使用class_name選項等,但出於某種原因,我得到了一些奇怪的結果。

任務關聯

belongs_to :assigned_to, :class_name => 'User', :foreign_key => 'assigned_to' 

用戶協會

has_many :assigned_tasks, :class_name => 'Task', :foreign_key => 'assigned_to' 

然而,當我看到當任務被保存正在生產的SQL,則返回nil爲assigned_to ID(這是一個整數列) ..然後當Tasks/Index操作被調用時,我看到它正在嘗試拉取id = null的用戶,因爲它在該字段中以空值保存..

I'v e最有可能做錯了,因爲我是新手,所以任何援助將不勝感激。

感謝

+1

你能告訴我們更多的代碼嗎?也許從控制器 – house9

回答

0

我認爲你需要與FK _id

:foreign_key => 'assigned_to_id' 

我假設你的數據庫列名assigned_to_id

此外,這是一個很好的資源http://guides.rubyonrails.org/association_basics.html

+0

該欄目被命名爲'assigned_to',這就是爲什麼我設置foreign_key ..因爲我的印象是,軌道只會採取相關的模型,並添加一個「_id」的結尾它..除非你手動設置foreign_key。 – Mike

+0

如果您可以選擇重命名列,我會。 – house9

1

我做錯了兩件事:

  1. 當我創建了選擇標記時,我忘記了包含:user部分,所以當傳入參數時,用戶的ID在用戶對象之外。

  2. belongs_to:assigned_to與數據庫列具有相同的名稱;當選擇字段被修復後,參數確實進入正確的時候,它會抱怨傳入的值不是對象。用戶期望的,收到的字符串等等等。切換關聯名稱解決了這個問題,這使得100%有意義,爲什麼我肯定應該更改數據庫字段名稱。