我有一个名为WorkInterval的模型,它基本上包含记录:
start_date, end_date
我希望能够获得特定任务的所有WorkIntervals(我知道如何处理关联)并获得花费的总时间。因此,对所有实例进行end_date和start_date(end_date - start_date)之间所有差异的聚合(添加)。
现在我能够做到这一点:
@task.work_intervals
- >这给了我所有的工作间隔,但我怎样才能以干净的红宝石方式获得花在该任务上的时间总和?
注意:
1 - end_date和start_date都是 DateTime 。
2 - 某些实例可能将end_date设置为NIL,如果是这种情况,则应采用当前日期时间。
答案 0 :(得分:0)
@task.work_intervals
.map {|i| (i.end_date || Time.now).to_time - i.start_date.to_time }
.reduce(:+)
# => total in seconds
答案 1 :(得分:-1)
这是一个提示,在你的任务模型中定义一个这样的函数:
def total_time_in_hours
_total_time = 0
self.work_intervals.each do |work_interval|
_start_date = work_interval.start_date
_end_date = work_interval.end_date
_end_date = Time.now unless _end_date.blank?
_total_time += ((_end_date - _start_date)/1.hour).round
end
_total_time
end
现在可以像@any_task.total_time_in_hours
一样访问总时间...希望有助于......:)
[UPDATE]
忽略这个答案,我犯了一些错误...... :(
我的测试是在posgresql中使用我的数据库的实际记录完成的,表格列最初是作为日期时间创建的,但是当我在Rails中检索记录时,如果有什么变化,我不会知道......
1.8.7-p371 :001 > @init_date = MaterialReservacion.first.hora_limite
=> Thu, 11 Apr 2013 19:09:14 CDT -05:00
1.8.7-p371 :002 > @end_date = Time.now
=> Fri Apr 12 09:33:34 -0500 2013
1.8.7-p371 :003 > ((@end_date-@init_date)/1.hour).round
=> 14