【问题标题】:Rails: Statistic导轨:统计
【发布时间】:2013-06-13 23:31:41
【问题描述】:

您好,我是编程和 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 active record call 来满足我的需要

【问题讨论】:

    标签: sql ruby-on-rails-3 activerecord statistics


    【解决方案1】:

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

    可能有 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多