Проблема с вашим кодом в том, что вы не передавали правильный формат данных в line_chart
. Чтобы нарисовать линейную диаграмму, данные должны быть в формате Hash, например:
<%= line_chart {"2016-05-21 23:50:40 UTC"=>20, "2016-05-21 23:50:57 TC"=>23} %>
{"2016-05-21 23:50:40 UTC"=>20, "2016-05-21 23:50:57 UTC"=>23}
В предыдущем примере вы видите даты (строки) в качестве ключей к хэшу, а значения (целые числа) — 20 и 23. В вашем случае вам нужен хэш, где ключи — это даты, а значения хэша — максимальное, минимальное или текущая температура. { "date_1" => число, "date_2" => число, ...
Чтобы протестировать свой код, я создал модель под названием 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 линиями, показывающими максимальную, минимальную и текущую температуру с течением времени.
Я использовал метод inject
для создания хэша, где ключи — это даты, а значения — это атрибуты [max, min, current] модели Temeperature. Для получения дополнительной информации о методе inject прочитайте это поток переполнения стека.
В вашем случае вы должны попробовать это:
<%= 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 }}
] %>
person
Volodymyr Balytskyy
schedule
22.05.2016