我对此问题感到困惑。
所以,我有一个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
现在,我想做的是让所有分配给给定用户监督的用户的任务(满足一些标准)
示例:
我需要一个查询来监督受监管用户完成的任务(即任务x,g,h& t)。
我该如何解决这个问题?
提前致谢。
答案 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'
认为应该这样做..