0

我正在尝试关注这个Railscast并为我的 Inquiry 模型创建一个 morris.js 折线图。

我已经将使用的计数分组date_trunc为几个月,但现在我不太确定如何让 X 轴迭代几个月(例如 2012 年 6 月、2013 年 7 月),而不是像 railscasts 笔记中那样按日期。

我在这里尝试了 range#step 方法,但现在图表只显示一个日期(2012-07-01),没有计数,没有别的。从范围变量中注释掉.step(1.month)方法,图形工作正常,但 x 轴按日期迭代。

class Enquiry < ActiveRecord::Base      

def self.chart_data(start = 1.year.ago)
    total_count = total_count_by_month(start)
    start = start.to_date.beginning_of_month
    today = Date.today.beginning_of_month
    range = (start..today).step(1.month)

      range.map do |month|
        {
          created_at: month,
          total_enquiries: total_count[] || 0
      }
    end
  end

  def self.total_count_by_month(start)
    enquiries = unscoped.where(created_at: start.beginning_of_month..Time.now)
    enquiries = enquiries.group("date_trunc('month', created_at)")
    enquiries = enquiries.select("date_trunc('month', created_at) as created_at, count(*) as count")
    enquiries.each_with_object({}) do |enquiry, counts|
      counts[enquiry.created_at.to_date] = enquiry.count
    end
  end
end

如何让图表的 x 轴按月(2013 年 6 月、2013 年 7 月 ....)而不是按日期进行迭代?

4

1 回答 1

3

对于其他面临同样问题的人,解决方案概述如下:

def self.chart_data(start = 1.year.ago)
    total_count = total_count_by_month(start)

    ##############################################
    start = start.to_date.beginning_of_month
    today = Date.today.beginning_of_month
    range = (start..today).select {|d| d.day == 1}
    ##############################################

    range.map do |month|
        {
          created_at: month,
          total_enquiries: total_count[] || 0
      }
    end
  end

图表的 x 轴现在按月迭代。

解决方案可在此处找到。

我仍在寻找有关图表日期如何显示(%b %Y)而不是当前格式(yyyy-mm-dd)的解决方案。

于 2013-07-12T02:31:42.900 回答