2016-05-21 3 views
2

У меня есть данные, которые ежедневно добавляются пользователем через форму. Некоторые из этих полей записывают температуру:: ambcur,: ambmin,: ambmax ​​и т. Д. Это все часть лотка, у которого есть datalogОтображение данных с помощью Chartkick

Я использую chartkick и его большой, но я не уверен, как отображать данные за время.

Im пытается сделать многострочную линейную диаграмму.

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

Кроме того, особая линейная диаграмма также не работает.

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

Может кто-нибудь помочь мне направить меня в правильном направлении? thanks :)

+0

у вас есть ** groupdate ** установлен камень? –

+0

@RareFever нет Я его прокомментировал, потому что он не работает с моей базой данных dev, но работает на pg. Поэтому рекомендация заключалась в использовании наборов данных. – mGarsteck

+0

Вы можете сделать пример под названием «Временная шкала»? dataslices - это драгоценный камень? , если да, оставьте ссылку PLS. –

ответ

4

Проблема с вашим кодом в том, что вы не передали правильный формат данных на line_chart. Чтобы нарисовать линию диаграммы данные должны быть в формате хеша, например:

<%= 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. В вашем случае вам нужен Hash где ключами являются даты и значения Хэша, это максимальная, минимальная или текущая температура. { "дата_1" => номер, "дата_2" => номер, ...}

Чтобы проверить мой код, который я создал модель под названием температуры. Вот таблица: Я назвал это

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

Я использовал инъецировать для создания хэша, где ключи даты и значения атрибутов [макс, мин, ток] модели Temeperature. Для получения дополнительной информации о введите, см. 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 }} 
       ] %> 
+0

Спасибо, плохо сделайте это. – mGarsteck

+1

Да, это действительно работало. Большое спасибо с помощью !!!! – mGarsteck

Смежные вопросы