我正在使用find方法如下:
@records = Effort.find( :all,
:select => 'full_name, taskType, sum(hours)',
:group => 'full_name, taskType',
...
@records.each do |record|
查询工作正常。我感到困惑的是如何访问总和(小时)值。我尝试了以下内容:
record.sum(hours) # undefined local variable hours
record.sum_hours # sum_hours undefined
record[2] # Gives empty string
record[3] # Same, just double checking where the index might start...
我有点卡住如何访问该值!如果我将<%= debug @records %>
添加到我的视图中,我会看到调试输出,例如:
---
- !ruby/object:Effort
attributes:
full_name: admin
taskType: Pre-Sales
sum(hours): '16'
答案 0 :(得分:2)
您希望通过此查询实现什么目标?您是否想要获得所有Effort
小时的总和,或者通过其他方式对它们进行分组?
以下查询
@records = Effort.find( :all,
:select => 'full_name, taskType, sum(hours)',
...
只返回1个值,因为你在那里选择sum(hours)
,这导致SQL将结果聚合到第一行。这意味着您将始终获得第一个Effort
行,并将sum(hours)
字段设置为所有工作所花费的总时数。
如果您只想要所有Effort
小时的总和,您可以这样做:
Effort.sum(:hours)
如果您希望根据其他一些标准来计算小时数,请更新您的问题。
修改强>
在这种情况下,你可以这样做,
@records = Effort.group(:full_name, :taskType).sum(:hours)
你最终会得到一个如下所示的哈希:
[full_name, taskType] => count
即
['baking cookies', 'baking'] => 12
['baking cakes', 'baking'] => 2
...
您可以像:
一样迭代它@records.each do | (full_name, task_type), hours |
puts 'Full Name: #{full_name}, Task Type: #{task_type}, Total Hours: #{hours}'
end
答案 1 :(得分:0)
不确定它是否有效,但您可能想尝试一下:
@sums = Effort.sum(:hours,
:group => [:project_task_id, :user_id],
:joins => [:project_task, :user])
它应该为您提供一系列记录。那么你通常应该能够收集这些:
@array = @sums.collect do |aggregate|
[aggregate.project_task.name, aggregate.user.name, aggregate.hours]
end
答案 2 :(得分:0)
回顾我的帖子和调试输出时,我突然想到它就在页面上:
record.attributes[ 'sum(hours)' ]
我认为像record.full_name
这样的东西真的是一种访问属性数组的便捷方法吗?