查询以获取所有嵌套的关联对象

时间:2016-01-05 17:05:32

标签: ruby-on-rails activerecord active-record-query

我对此问题感到困惑。

所以,我有一个Task模型和一个User模型。

任务有一个assignee_id列,指向已分配任务的user

另一方面,User模型具有以下内容:

has_many :tasks, foreign_key: :assignee_id
has_many :supervised_users, class_name: 'User', foreign_key: :supervisor_id

所以,我可以打电话:

user.supervised_users => returns all users supervised by this user
user.tasks => returns all tasks assigned to the user

现在,我想做的是让所有分配给给定用户监督的用户的任务(满足一些标准)

示例:

  • 用户A正在监督用户B,C& D
  • 用户B有任务x(已完成)& y(未完成)
  • 用户C有任务g(已完成)& j(未完成)
  • 用户D具有任务h(已完成),n(未完成)&吨(已完成)

我需要一个查询来监督受监管用户完成的任务(即任务x,g,h& t)。

我该如何解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:3)

所以,我就是这样做的 - 分两个阶段,首先使用直通关系来获得所有supervised_tasks(完整和不完整)

在用户类中添加:

has_many :supervised_tasks, through: :supervised_users, class_name: 'Task'

你可能也需要在那里有一个源字段,所以,像',source :: task'这样的东西被添加到那里。

尝试'user.supervised_tasks'

进行测试

然后我会在tasks类中创建一个范围,以识别已完成的任务,所以类似(假设它是一个布尔值,如果不是则修改):

scope :completed, -> { where(completed: true) }

然后你可以调用user.supervised_tasks.completed

然后,您甚至可以将其作为范围has_many通过以下方式添加到您的用户模型中:

has_many:completed_supervised_tasks, - > {completed},through :: supervised_users,class_name:'Task'

认为应该这样做..