使用Chartkick显示数据

时间:2016-05-21 23:28:49

标签: ruby-on-rails ruby ruby-on-rails-4 chartkick

我有每天由用户通过表单添加的数据。其中一些领域记录了温度:ambcur,:ambmin,:ambmax​​等 这是具有数据记录的托盘的所有部分

我正在使用chartkick并且很棒,但我不确定如何随时间显示数据。

我正在尝试进行多张流程图。

<%= line_chart [
                 {name: "Series A", data: @tray.datalogs.ambcur},
                 {name: "Series B", data: @tray.datalogs.ambmin}
             ] %>

此外,单数线图也不起作用。

<%= line_chart @tray.datalogs.group(:ambcur).count %>

有人可以帮助引导我朝着正确的方向前进吗?谢谢:))

1 个答案:

答案 0 :(得分:5)

您的代码存在的问题是您没有将正确的数据格式传递给line_chart。要绘制折线图,​​数据必须采用哈希的格式,如下所示:

<%= line_chart {"2016-05-21 23:50:40 UTC"=>20, "2016-05-21 23:50:57  TC"=>23} %>

{&#34; 2016-05-21 23:50:40 UTC&#34; =&gt; 20,&#34; 2016-05-21 23:50:57 UTC&#34; =&gt ; 23}

在前面的示例中,您将日期(字符串)视为哈希的键,值(整数)是20和23。 在您的情况下,您需要一个哈希,其中键是哈希的日期和值是最大,最小或当前温度。 {&#34; date_1&#34; =&GT;数字,&#34; date_2&#34; =&GT;号码,...}

为了测试我的代码,我创建了一个名为 Temperature 的模型。这是表格:

  create_table "temperatures", force: :cascade do |t|
    t.integer  "max",        limit: 4
    t.integer  "min",        limit: 4
    t.integer  "current",    limit: 4
    t.datetime "created_at",           null: false
    t.datetime "updated_at",           null: false
  end

在我看来,我称之为:

<%= line_chart [
 {name: "Series A", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.max; res }},
 {name: "Series B", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.current; res }},
 {name: "Series C", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.min; res }}
             ] %>

我得到了3行显示最大,最小和当前温度的情节。

enter image description here

我使用inject方法创建一个哈希,其中键是日期,值是模型 Temeperature 的属性[max,min,current]。有关注入方法的其他信息,请阅读this stackoverflow thread

在你的情况下你应该试试这个:

<%= line_chart [
 {name: "Series A", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambmax; res }},
 {name: "Series B", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambcur; res }},
 {name: "Series C", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambmin; res }}
                 ] %>