2016-11-20 4 views
1

Пытается сделать линейную диаграмму нескольких серий. (Visualizer является Chartjs.) Из README:Rails Chartkick. Многострочная линейная диаграмма с вложенным хешем

<%= line_chart [ 
    {name: "Series A", data: series_a}, 
    {name: "Series B", data: series_b} 
] %> 

Мои данные поступают в формате JSON уже, но занимает немного манипуляций, чтобы получить право. Сырая форма выглядит следующим образом:

=> [{"id"=>30, 
    "runner"=>"Golden State Warriors", 
    "price"=>1.51, 
    "histories"=>[{"price"=>1.51, "created_at"=>"2016-11-19T17:42:18.699Z"}, {"price"=>1.51, "created_at"=>"2016-11-20T07:56:55.662Z"}]}, 
{"id"=>32, ETC 

Так, с markets.map{ |m| [name: m['runner'], data: m['histories'].map{|h| [h['created_at'], 1/h['price']] }]}.flatten! , который дает:

=> [ 
{:name=>"Golden State Warriors", :data=>[["2016-11-19T17:42:18.699Z", 0.6622516556291391], ["2016-11-20T07:56:55.662Z", 0.6622516556291391]]}, 
{:name=>"Los Angeles Clippers", :data=>[["2016-11-19T17:42:18.795Z", 0.1], ["2016-11-20T07:56:55.717Z", 0.1]]}, ETC 

Хотя я не получаю сообщение об ошибке, то диаграмма является пустой квадрант с [object Object] 0,0 ,

На мой взгляд, диаграмма находится в блоке @markets.each, потому что я хочу создать несколько диаграмм на странице, отображающей одно и то же с разными данными. Я играл с .each_with_index и я могу получить график, чтобы показать частично только вручную ввод данных, как README показывает:

<%= line_chart [ 
     {name: markets[i]['runner'], data: markets[i]['histories'].map{|h| [h['created_at'], 1/h['price']]}}, 
     {name: markets[i+1]['runner'], data: markets[i+1]['histories'].map{|h| [h['created_at'], 1/h['price']]}} 
    ] %> 

который показывает первые две серии на графике, но не может быть правильным так как для каждого графика есть разные элементы i.

Что я могу сделать?

ответ

0

Вычислено с использованием метода .each. Я уверен, что есть более чистый способ сделать это, но сейчас он работает.

def chart(markets) 
    chart_data = markets.map{ |m| [name: m['runner'], data: m['histories'].map{|h| [h['created_at'], 1/h['price']]}]}.flatten 
    line_chart chart_data.each do |m| 
    [{name: [:name], data: [:data]}] 
    end 
end