我知道有类似的问题,但我认为我有一个独特的情况。
我正在尝试为Redmine 3开发一个插件。使用Postgresql。
有一个名为TimeEntry的表,其中包含一个日志文件,用户可以在哪个问题上工作。
我有一个名为TimeEntry的表,就像这样;
ID user_id project_id issue_id hours
1 1 1 1 6
2 1 2 1 5
3 1 1 1 3
4 2 2 1 2
5 1 1 2 7
6 3 1 2 8
7 2 2 1 4
我正在为其项目ID获取此表。但是你可以看到那里有一些重复的行。我想把它们变成一个并将它们的时间合计为一个。
例如,具有1和3的ID。相同的用户在同一问题中的同一项目中工作。我试图让它看起来像一排,但他们的小时总和,如9。
我可以通过在ActiveRecord中进行分组来实现这一点,但还有一个问题。由于我使用Rails 4,我需要访问问题主题。为此我正在做的例如,TimeEntry.first.issue.subject给了我这个问题的主题。
如果我在Rails Console中执行此操作,我只会得到一些这样的数组;
TimeEntry.group(:issue_id).sum(:hours)
=> {1=>9.0, 2=>5.0}
但是通过这种方式我无法访问此项目的问题,因为不再有issue_id了。
我怎样才能解决这个问题?
感谢。 PS:我没有在stackoverflow上提问的经验,所以如果我做错了什么或其他什么,请善待。也可能存在一些语法问题,因为英语不是我的母语。
答案 0 :(得分:0)
TimeEntry
.group(:user_id, :issue_id)
.select('user_id, issue_id, sum(hours) as hours')
这应返回每个用户/问题对的TimeEntry
列表。对于每个TimeEntry
,只会设置3个字段:
user_id
issue_id
hours
属性,该属性将是该对中所有小时数的总和