如何格式化Ruby数组以用作Highcharts中的数据

时间:2012-02-20 01:49:00

标签: javascript ruby ruby-on-rails-3 highcharts

我正在尝试使用我的Rails 3.1应用程序中的Highcharts显示标题为“随时间购买”的图表。

在我的函数中,我返回一个由created_at日期(日期格式)和购买价值(整数格式)组成的数组。当我在视图中显示该功能时,它看起来像这样:

[2012-01-065002012-01-072502012-01-08130...]

转换为:[[2012-01-06,500],[2012-01-07,250],[2012-01-08,130]]

在Highcharts JS代码中的视图中,我有以下系列:

    series: [{
      name: '<%= User.product_names_by_user(current_user) %>',
      pointInterval: <%= 1.day * 1000 %>,
      pointStart: <%= User.from_the_first_purchase_date(current_user) %>,
      data: <%= User.purchases_over_time(current_user) %>
    }]

from_the_first_purchase_date是一个只返回日期格式的第一个购买日期的函数。

purchases_over_time是有问题的功能(如上所述)。

根据我对Highcharts API的理解(或缺乏),我可以使用具有两个值的数组列表作为图表的数据(Highcharts docs),而数组的第一个值表示x值,第二个是y值。

所以,我希望能够随着时间的推移绘制购买价值。在视图中,我的图表显示但没有显示数据,并且没有可见的绘图点。

我也尝试以下列格式返回数组无效:

[["2012-01-06", 500], ["2012-01-07", 250], ["2012-01-08", 130]]

有什么建议吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您必须为xAxis指定datetime类型:

xAxis: { type: 'datetime' }

您的x值应格式化为

[[Date.UTC(2012,0,6),500],[Date.UTC(2012,0,7),250],[Date.UTC(2012,0,8),130]]

注意,javascript Date.UTC的月份定义从0(0 = 1月... 11 = 12月)开始

答案 1 :(得分:0)

或者您可以通过Date.parse转换控制器中的日期时间,然后使用lazy-high-chart gem将数据发送到查看器中的HightChart。以下是lazy-high-chart https://github.com/michelson/lazy_high_charts的网站。