我的Rails应用程序有用户创建的用户和任务。用户还可以创建任务并将其他用户分配给该任务。我不太清楚如何在这里建立联系。
我知道因为任务是由用户创建的,所以我可以像下面这样有一个关联,
class User
has_many :tasks, dependent: :destroy, foreign_key: :user_id
end
class Task
belongs_to :user
end
我还想在Task
模型中添加创建者的关联,但我不确定如何做到这一点,因为创建者也将是User
类的实例,并且我已经与User
有了belongs_to
关联
我试图在Task
模型中添加创建者的关联,但没有工作。
has_one :user, foreign_key: :creator_id, class_name: "User"
既然已经定义了belongs_to :user
方法,那么该关联已经采用了@task.user
方法。您不能为不同的方法使用相同的名称,因此您必须为该关联使用不同的名称。
关联名称不必与模型相同。您可以将创建者关联命名为其他名称,例如"creator":
has_one :creator, foreign_key: 'creator_id', class_name: "User"
由于任务有一个用于创建者的外键,因此您应该能够对两个关联使用belongs_to:
class Task
belongs_to :user
belongs_to :creator, foreign_key: 'creator_id', class_name: 'User'
end
这里有一个关于has_one
和belongs_to
之间区别的讨论:belongs_to和has_one之间的区别是什么?
你可以这样做:
@task.user # the User who is assigned the task
@task.creator # the User who created the task