Rails:创建一个具有递增属性的数组?

时间:2013-03-25 18:02:32

标签: ruby-on-rails arrays

这是我关于Stackoverflow的第一个问题,所以不要撕裂我!如果我的问题太长或太基础,我道歉,但我认为,如果我明白,清楚,丰富地打字,所有参与者都会更容易理解我的问题。如果我的问题格式可以改进,请告知我以后的问题。

为了把事情放在上下文中,我正在创建一个Ruby on Rails应用程序,它涉及在Googlegraphs上显示一系列记录( Times )。这些 Times 记录有两个重要属性;他们的'日期'属性和'hours_worked'属性。简而言之,我需要在图表的特定日期显示所有'hours_worked'。因此,要在图表上显示的数组的第一个元素包含第一个日期的所有'hours_worked'值,第二个元素包含所有'hours_worked'第二个日期的值,依此类推。

显然,我不能将所有记录'hours_worked'值放入数组中,因为'date'属性将被完全忽略。如果我有一个'hours_worked'的数组,其中两个元素位于相同的'date',那么图表就不会知道这一点,只是在没有确认的情况下显示它们'date'

我的“解决方案”与伪代码:

我虽然可以尝试遍历所有'时间'记录并将其拆分为'date'已存在于一个数组中的记录,并将其全部放入其他数组中的副本:

@array1 = []#Original values
@array2 = []

@task.time_and_attendances.each do |f|
 if f.date is not in @array2
 @array2 << f

else

  @array1 << f

然后我想比较两个数组,如果@ array2包含@ array1包含的任何日期,只需将'hours_worked'加在一起即可。因为@ array1将包含需要添加所有记录的所有记录,所以具有多个记录的日期只会将'hours_worked'属性组合在一起。这会给我一个数组,其中每个值都是每个日期'hours_worked'的总量。

这对我的问题来说是理想的解决方案,但我对如何实现它感到困惑。那里有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

也许是这样的:

Time.select('date, sum(hours_worked) as total_hours_worked').group('date(date)')

这应该为您提供一个包含date和total_hours_worked属性的Time对象数组。