2011-09-15 66 views
1

我有一個用戶模型和一個任務模型。我如何在一個對象中涉及兩次對象?

任務具有創建者,用戶類型和用戶類型的受理人。

我已經完成了AddUserIdtoTasks的遷移以獲得創建者關係的工作,但現在我需要再次做同樣的事情來添加受讓人,但我已經在使用關鍵字'user'。我應該如何去建立一個適當的關係。

一項任務總是隻有一個受讓人。

我正在使用用戶模型的設計。

回答

2
has_one :creator, :class_name => "User" 
has_one :asignee, :class_name => "User" 

或者belongs_to,這取決於你的字段如何設置。 has_onebelongs_to都採用可選的:class_name參數來處理像您這樣的情況。

+0

那麼你可以調用creator_id或asignee_id? – Btuman

0

在您的任務模型創建領域assignee_id然後在

class Task < AR::Base 
    belongs_to :assignee, :class_name => 'User' 
end 

使用它的關係是在關係

class User < AR::Base 
    has_many: :assigned_tasks, :class_name => 'Task', :foreign_key => :assignee_id 
end 

對不起對方,應該是:class_name。更新的用戶類別也帶有:foreign_key參數,沒有它user.assigned_tasks將使用:user_id參數(has_many的默認值,即「#{class_name} _id」)加入記錄。

我邀請您閱讀我發佈的鏈接,它比我說明了所有這些事情。

來源:http://guides.rubyonrails.org/association_basics.html#detailed-association-reference

+0

我試過這個,但它似乎沒有拿起類。你從哪裏得到:assigned_tasks - 這背後的邏輯是什麼? FYI是1:1的關係。 – cjm2671

+0

對不起,忽略了1:1的關係,這就是我的愚蠢。 – cjm2671

+0

我已經更新了我的答案,它確實包含錯誤。對於名字':assigned_task'背後的邏輯,什麼都沒有。我拿起了我的選擇的名字,然後我重寫了AR慣例。您可以根據需要更改它。 – Fabio

相關問題