2011-09-15 36 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

相关问题