通过其他几个人同桌的has_many

时间:2014-11-28 12:23:12

标签: ruby-on-rails ruby associations model-associations

我想做的是: 我有一个用户模型,我有一个任务模型 任务有两种类型的用户所有者和监督者都是用户!

所以我到目前为止的是:

任务模型

class Task < ActiveRecord::Base
  has_many :task_owners, dependent: :destroy
  has_many :task_supervisors, dependent: :destroy
  has_many :users, through: :task_owners
  has_many :users, through: :task_supervisors
end

TaskSupervisor模型

class TaskSupervisor < ActiveRecord::Base
  belongs_to :task
  belongs_to :user
end

TaskOwner模型

class TaskOwner < ActiveRecord::Base
  belongs_to :task
  belongs_to :user
end

最后是用户模型

class User < ActiveRecord::Base
  has_many :task_owners
  has_many :task_supervisors
  has_many :tasks, through: :task_owners
  has_many :tasks, through: :task_supervisors
end

现在你可以想象......我的问题是当我得到一个任务并检索用户时我只得到我的一个关联...我需要的是一种改变吸气剂名称或识别它们的方法基本上如何能够说出像

这样的话
task.owners
task.supervisors

1 个答案:

答案 0 :(得分:1)

class Task < ActiveRecord::Base
  has_many :task_owners, dependent: :destroy
  has_many :task_supervisors, dependent: :destroy
  has_many :owners, through: :task_owners, source: :users
  has_many :supervisors, through: :task_supervisors, source: :users
end

你应该能够做到这一点。

然后你应该得到你的task.ownerstask.supervisors

编辑:

您需要将用户模型更改为

class User < ActiveRecord::Base
  has_many :task_owners
  has_many :task_supervisors
  has_many :owned_tasks, through: :task_owners, source: :tasks
  has_many :supervised_tasks, through: :task_supervisors, source: :tasks
end