0

嗨,我是编程和 Rails 的新手,我正在尝试在我的应用程序中创建一个显示统计信息的管理界面。我有一个Job有很多 的模型,Responses我需要收集每天的平均响应时间。为了收集第一份工作的响应时间,我将执行以下操作

job = Job.first
response = job.responses.first
response_time = response.created_at - job.created_at

这很简单,但我在尝试为当天的所有工作收集这些信息时遇到了麻烦。我试图想出一个解决方案,它会给我一组数据对。例如{[June 17, 51s], [June 18, 60s], [June 19, 38s], ... 等}。

我似乎无法找出正确的 Rails 活动记录调用,这将给我我需要的东西

4

1 回答 1

0

不要以为你会找到一个活动记录解决方案,但你有你需要的,只需要添加一点红宝石。

可能有 100 种方法可以做到这一点,这是一种创建哈希的方法,其中从工作创建日期开始的天数作为键,计数作为值

job = Job.first
start_date = job.created_at
response_dates = job.responses.pluck(:created_at) #creates an array of created_at datetimes
day_stats = response_dates.each_with_object(Hash.new(0)) { |dt, h| h[((dt - start_date)/1.day).round(0)] += 1 }

这基本上遍历 datetime 数组,从工作日期中减去响应日期,将其除以 1 天并将其四舍五入为一整天。

输出将类似于:

=> {0=>1, 5=>2, 6=>1, 7=>2, 9=>1, 31=>1, 37=>6, 40=>1, 42=>3, 44=>1, 59=>32, 60=>59, 61=>2, 64=>1, 65=>2, 78=>168, 97=>39, 93=>2, 110=>1, 214=>1}

如果你想要日期,你可以将 key*1.day 添加到 start_date

于 2013-06-17T23:22:31.503 回答