2014-12-03 50 views
0

对于Rails,我仍然非常青睐,我试图创建一个范围或类方法来帮助我获得“最活跃的项目”在我的时间跟踪应用程序中:Rails找到用户任务最多的项目的最简单方法

任务属于项目和用户。

我可以访问user.tasks和project.tasks以及找出使用类方法上project.rb在对每个项目的小时数

def project_hours 
    tasks.sum(:hours) 
end 

理想情况下,我想能够执行查询以获取用户B为项目A执行的所有任务,然后作为后续工作,尝试按该用户的此项目的任务小时数订购项目。

我很抱歉如果这已被覆盖之前,我不确定是否有一个有效的方法来实现这一目标?

非常感谢。

回答

0

在用户模式:

def tasks_by_project(project) 
    self.tasks.where({:project_id => project.id}).group('tasks.project_id').order('SUM(tasks.hours) ASC') 
end 

现在你可以做

@user = User.find(1) 
@project = Project.find(232) 

# return a list of projects scoped by user_id andproject id, ordered by task hours 
@user.tasks_by_project(@project) 
+0

感谢威尼斯这是伟大的,并让我的用户和项目的任务。现在我试图弄清楚如何(如果可能)按任务时间排序项目本身,而不是自己排列任务? – onjegolders 2014-12-03 16:11:09

+0

在我的例子中,我包含了一个group()和order()方法。这是否正确?它应该按小时总数排序,并按项目的任务时间分组。 – Venice 2014-12-03 16:34:43

+0

感谢威尼斯,它似乎在吐出一组任务,所以我可以打电话给.first或.last,这将是一项单一任务,但理想情况下,我希望将项目分组,而不是其中的任务。 我现在遇到另一个问题,因为我不得不切换到Postgres,并且它似乎使用不兼容的语法。 – onjegolders 2014-12-03 17:00:11